注解开发
注解开发定义bean
- 使用@Componnet定义bean
@Component("bookDao")
publicclassBookDaoImplimplementsBookDao {
@Override
publicvoidsave() {
System.out.println("bookDao....");
}
}
- 核心配置文件中通过组件扫描加载bean
<context:component-scanbase-package="com.wangxh.dao"/>
- Spring提供@Component注解的三个衍生注解
- @Controller:用于表现层bean定义
- @Service:用于业务层bean定义
- @Repository:用于数据层bean定义
纯注解开发
- Spring3.0升级了纯注解开发模式,使用java类替代配置文件,开启了Spring快速开发赛道
- java类替代Spring核心配置文件
- 将者一段配置使用@Comfiguration替代配置类
<?xmlversion="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd">
</beans>
- 将这一段使用@ComponentScan("com.wangxh")替换作用是用于设定扫描路径,但此注解只能添加一次,多个数据请用数组格式
<context:component-scanbase-package="com.wangxh.dao"/>
- 读取Spring核心配置文件初始化容器对象切换为读取java配置类初始化容器对象
//加载配置文件初始化容器
ApplocationContextctx=neClassPathXmlApplicationContext("applicationContext.xml");
//加载配置类初始化容器
ApplicationContextctx=newAnnotationConfigApplicationContext(SpringConfig.class);
bean作用范围
使用@Scope定义bean作用范围
@Repository
@Scope("singleton")
publicclassBookDaoImplimplementsBookDao {
使用@PostConstruct,@PreDestroy定义bean生命周期
publicBookDaoImpl(){
System.out.println("book dao constuctor...");
@PostConstruct
publicvoidinit(){
System.out.Println("book init.");
@PreDestroy
publicvoiddestroy(){
System.out.println("book destory");
}
}
}
}
依赖注入
自动装配
@Service
publicclassBookServiceImplimplementsBookService {
@Autowired
privateBookDaobookDao;
publicvoidsetBookDao(BookDaobookDao){
this.bookDao=bookDao;
}
publicvoidsave(){
System.out.println("book service save....");
bookDao.save();
}
}
- 注意:自动装配基于反射设计创建按对象并非暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
- 注意:自动装配建议使用无参构造器方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
- 如果你想指定加载哪一个bean使用@Qulifier注解开启指定名称装配bean
@Service
publicclassBookServiceImplimplementsBookService {
@Autowired
@Qualifier("bookDao")
privateBookDaobookDao;
}
使用这个@Qualifier必须得有@Autowired
- 使用@Value实现简单类型注入
@Repository("bookDao")
publicclassBookDaoImplimplementsBookDao {
@Value("100")
privateStringconnectionNum;
}
- 加载外部properties文件
- 使用@PropertySource注解加载properties文件
@Configuration
@ComponentScan("comm.wangxh")
@PropertySource("classpath:jdbc.properties")
publicclassSpringConfig{
}
第三方bean管理
- 使用@bean配置第三方bean
@Configuration
publicclassSpringConfig {
@Bean
publicDataSourcedataSource(){
DruidDataSourceds=newDruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
ds.setUsername("root");
ds.getPassword("root");
returnds;
}
}
- 使用第三方管理bean以后,接下来使用方式一:导入式
publicclassJdbcConfig{
@Bean
publicDataSourcedataSource(){
DruidDataSourceds=newDruidDataSource();
//相关配置
returnds;
}
}
- 使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式
@Configuration
@Import(JdbcConfig.class)
publicclassSpringConfig{
}
- 方式二:扫描式
@Configuration
publicclassJdbcConfig{
@Bean
publicDataSourcedataSource(){
DruidDataSourceds=newDruidDataSource();
//相关配置
returnds;
}
}
- 使用@componnetScan注解扫描配置类所在的包,加载对应的配置类信息
@Configuration
@componnetScan({"com.wangxh.config","com.wangxh.service","com.wangxh.dao"})
publicclassSpringConfig{
}
第三方bean依赖注入
引用类型依赖注入
总结