注解配置
<context:annotation-config/>和
<context:aomponent-scan base-package="需要实现注入的类所在包"/>
<context:annotationconfig/>隐式地向spring容器注册
AutowiredAnnotationBeanPostProcessor、
CommonAnnotationBeanPostProcessor、
PerSistenceAnnotationBeanPostProcessor、
RequiredAnnotationBeanPostProcessor、
这四个BeanPostProcessor
声明bean
@Component 泛指组件
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Repository 持久层
持久层组件,用户标注数据库访问组件。(例如:Dao组件)
@Service 业务层
业务层组件。(例如:Service组件)
@Controller 控制层
控制层组件。(例如:struts的Action)
例子:
@Service
public class MyService implements IMyService{
}
@Repository("myDao")
public class MyDao implements IMyDao{
}
@Scope 定义bean作用范围
1、singleton :定义bean的范围为每个Spring容器一个实例(默认值)
2、Prototype :允许 多次实例化(使用一次创建一次实例)
3、request :定义bean的范围是HTTP请求。只有在使用web能力的 Spring上下文是才有效
4、session :定义bean的范围是HTTP会话。只有在使用web能力的 Spring上下文是才有效
5、global-session :定义bean的范围是全局HTTP会话。只有在portlet上下文中才有效
demo
@Scope("session")
@Component()
public class UserSessionBean implements Serializable {
注入bean
@Autowired (建议使用@Resource)
可以对成员变量、方法和构造函数进行标注,完成自动装配的工作。
(注:要使@Autowired能够工作,需要在配置文件中加入以下代码)
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
例子:
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
...
}
public class UserServiceImpl implements UserService {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
@Qualifier 制定注入bean的名称
@Qualifier只能和@Autowired结合使用,是对@Autowired有益的补充。
例子:
@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
this.userDao = userDao;
}
@Resource 代替Spring的@Autowired注解
@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入,而@Resource默认按照byName自动注入。
@Resource两个属性:1、name 2、type 默认byName自动注入策略。
@PostConstruct
bean初始化之后被Spring容器执行。
典型应用:往bean中注入父类中的属性,而又无法重写父类的属性或者和属性的setter方法。
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
private SessionFactory mySessionFacotry;
@Resource
public void setMySessionFacotry(SessionFactory sessionFacotry) {
this.mySessionFacotry = sessionFacotry;
}
@PostConstruct
public void injectSessionFactory() {
super.setSessionFactory(mySessionFacotry);
}
}
@PreDestroy
Bean初始化之后被Spring容器执行。
例子:
// 相当于在XML中配置了destroy-method
@PreDestroy
public void destory() {
System.out.println("destory.");
}