标签:spring
写在前面
abstract bean:如果它的abstract设置为true,它通常作为模板或者父类,不能实例化,记住要将它的abstract设置为true,否则,上下文会试着实例化该bean
spring3.0为我们提供了组件自动扫描机制,他可以在类的路径下寻找@Component,@Service,@Controller,@Repository注解的类,并把他们纳入spring容器管理
其中@Service标注业务层组件,@Controller标注控制层组件,如spring mvc的controller,struts2的action,@Repository标注数据访问组件,即Dao组件,而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解来标注组件。
首先需要加入对注解的支持
<!-- 加入对注解的支持 --> <context:annotation-config/> <!-- 扫描它下面的所有子包 --> <context:component-scan base-package="com.qzp"/>下面来介绍下常用的注解:
@Component(value="person")它的效果等同于applicationContext中的<bean name=" " class=" ">
如果发生了冲突,后者会覆盖前者。
@Resource(name="user")它的效果等同于applicationContext中的<prototype> 建议写在setter方法上面
bean的生存范围
@Scope(value="singleton")
bean的生命周期
@PostConstruct
@PreDestroy
他们写在初始化方法和销毁方法之上。
注解的完整实例
事例代码:
//bean的生存范围 @Scope(value="singleton") @Component(value="user") public class User{ private String userName; private String password; public User() { super(); System.out.println("User的构造方法...."); } @PostConstruct public void init() { System.out.println("User的初始化方法..."); } @PreDestroy public void destroy() { System.out.println("User的销毁方法..."); System.out.println("--------------"); } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }userService类
@Component(value="userService") public class UserService { private User u; public User getU() { return u; } //依赖于user这个@Component @Resource(name="user") public void setU(User u) { this.u = u; } public boolean saveUser(){ if(u!=null){ System.out.println("用户名是:"+u.getUserName()); return true; } else{ return false; } } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-- 加入对注解的支持 --> <context:annotation-config/> <!-- 扫描它下面的所有子包 --> <context:component-scan base-package="com.qzp"/> </beans>
public class TestAnnotation{ public static void main(String[] args) { AbstractApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContext.xml"); cxt.getBean("user"); UserService u=(UserService)cxt.getBean("userService"); u.saveUser(); cxt.close(); } }测试结果:
User的构造方法....
User的初始化方法...
用户名是:null
User的销毁方法...
--------------
标签:spring
原文地址:http://blog.csdn.net/qzp1991/article/details/43907739