spring基于注解开发
通过注解的形式用于bean的定义(@Componet
衍生3个注解,用于不同层次的bean的定义)这些注解需要放在对应的接口实现类上
1、@Controller:用于表现层的bean的定义—》Controller层
2、@Service:用于业务层的bean的定义—》Service层
3、@Repository:用于数据层的bean的定义—》Dao层
如果是通过配置类的形式来替代原有的applicationContext.xml的话就需要定义一个配置类SpringConfig
定义一个配置类:
1、声明当前类为Spring配置类@Configuration
2、设置bean扫描路径,多个路径书写为字符串数组格式@ComponentScan({"com.itheima.service","com.itheima.dao"})
//声明当前类为Spring配置类
@Configuration
//设置bean扫描路径,多个路径书写为字符串数组格式
@ComponentScan({"com.example.service","com.example.dao"})
public class SpringConfig {
}
同时在对应的运行主类中通过如下方式(AnnotationConfigApplicationContext
)获取对应的Spring的容器
//获取spring容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
bean对象的自动装配(@Qualifier:自动装配bean时按bean名称装配)通过暴力反射对于其对应的私有属性进行初始化–》不需要在写出setter方法
@Service
public class BookServiceImpl implements BookService {
//@Autowired:注入引用类型,自动装配模式,默认按类型装配
@Autowired
//@Qualifier:自动装配bean时按bean名称装配
@Qualifier("bookDao")
private BookDao bookDao;
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
通过注解@Autowired
@Qualifie r:自动装配bean时按bean名称装配 @Qualifier("bookDao")
简单类型的注入
//@Value:注入简单类型(无需提供set方法)
@Value("${name}")
private String name;
加载配置文件:
@PropertySource加载properties配置文件
@PropertySource({"jdbc.properties"})
管理第三方的bean:将JDBC的配置类调入到spring配置类中去(推荐使用@Import的形式,不推荐使用@ComponentScan({},{}))
@Import:导入JDBC配置信息:(@Import({JdbcConfig.class})
)
public class JdbcConfig {
//1.定义一个方法获得要管理的对象
@Value("com.mysql.jdbc.Driver")
private String driver;
@Value("jdbc:mysql://localhost:3306/spring_db")
private String url;
@Value("root")
private String userName;
@Value("root")
private String password;
//2.添加@Bean,表示当前方法的返回值是一个bean
//@Bean修饰的方法,形参根据类型自动装配
@Bean
public DataSource dataSource(BookDao bookDao){
System.out.println(bookDao);
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
@Configuration
@ComponentScan("com.example")
//@Import:导入配置信息
@Import({JdbcConfig.class})
public class SpringConfig {
}
通过注解@Bean进行自动装配第三方的bean信息
引用类型的通过成员变量进行引入,简单类型通过@value进行初始化,再通过调用变量名引入
//添加@Bean,表示当前方法的返回值是一个bean
//@Bean修饰的方法,形参根据类型自动装配
@Bean
public DataSource dataSource(BookDao bookDao){
System.out.println(bookDao);
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}