一、作用域注解
- 原 xml 配置: 配置属性
scope="prototype"
1
| <bean id="bookDao" class="cn.pangcy.dao.impl.BookDaoImpl" scope="prototype" />
|
- 现使用注解:
@Scope("prototype)"
1 2 3 4 5
| @Repository @Scope("prototype") public class BookDaoImpl implements BookDao(){ }
|
二、使用生命周期注解
- 原继承方式:
- 通过继承
InitializingBean
重写 afterPropertiesSet
方法实现 初始化钩子
- 通过继承
DisposeableBean
重写 destory
方法实现 销毁钩子
1 2 3 4 5 6 7 8 9 10 11
| public class BookDaoImpl implements BookDao, InitializingBean, DisposableBean(){ @Override public void afterPropertiesSet() throws Exception { System.out.println("service init ..."); }
@Override public void destroy(){ System.out.println("service destroy ..."); } }
|
- 现注解方式:
- 使用
@PostConstruct
注解实现初始化钩子
- 使用
@PreDestroy
注释实现销毁钩子
1 2 3 4 5 6 7 8 9 10 11 12
| @Repository public class BookDaoImpl implements BookDao(){ @PostConstruct public void init(){ } @PreDestroy public void destroy(){ } }
|
三、使用注解自动装配
- 使用
@Autowired
注解开启自动装配模式(按类型)
1 2 3 4 5 6 7 8 9 10
| @Service("bookService") public class BookServiceImpl implements BookService { @Autowired private BookDao bookDao;
public void save() { System.out.println("book service save ..."); bookDao.save(); } }
|
注意
- 自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因为无需提供 setter 方法
- 自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
- 使用
@Qualifier
注解开启指定名称装配bean
1 2 3 4 5 6
| @Service public class BookServiceImpl implements BookService { @Autowired @Qualifier("bookDao") private BookDao bookDao; }
|
注意:@Qualifier
注解无法单独使用,必须配合 @Autowired
注解使用
1 2 3 4 5 6 7 8 9
| @Service public class BookServiceImpl implements BookService { @Value("www.pangcy.cn") private String domain;
@Value("${jdbc.url}") private String url; }
|
四、使用配置文件注解
- 原 xml 配置: 配置
context
命名空间,指定 location
1
| <context:property-placeholder location="jdbc.properties" />
|
- 现注解方式: 在 SpringConfig 类中加入
@PropertySource
注解
- 如果有多个配置文件传入一个数组:
{ jdbc1.properties, jdbc2.properties, ... }
- 注意: 不允许使用通配符
*
1 2 3 4 5 6
| @Configuration @ComponentScan("cn.pangcy") @PropertySource("classpath:jdbc.properties") public class SpringConfig { }
|