我们也可以使用Annotation来实现注入操作,提高我们写代码的灵活性和效率。spring中要使用annotation,需要在配置文件中增加:
<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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.bjsxt"/> </beans>
|
我们只需要在相关类的属性前或者set方法前增加:
} @Resource (推荐)
◦ 默认按名称装配
} @AutoWired(不推荐)
◦ 默认按类型装配。根据属性类型,在容器中跟该类型匹配的bean。
} 示例:
@Resource(name="userDao2") //不指定名字,默认就是属性名。一般不需单独指定
userSeviceImpl中代码如下:
public class UserServiceImpl implements UserService {
@Resource private UserDao userDao; // = new UserDaoImpl();
@Override public void add(User user) { userDao.add(user); }
public UserDao getUserDao() { return userDao; }
public void setUserDao(UserDao userDao) { this.userDao = userDao; }
} |
@Resource用法总结:
按照名字装配 |
@Resource(name="ud") private UserDao userDao; |
直接找name为ud的bean |
@Resource private UserDao userDao; |
直接找name为userDao的bean。 如果找到这个bean,则注入;如果没有name=userDao的bean,则找接口UserDao下得唯一实现类。如果接口UserDao有多个实现类,则抛出异常。 |
|
按照类型装配 |
@Resource(type=UserDaoImpl.class) private UserDao userDao; |
按照类型装配。 |
IOC容器管理的bean作用域
IOC容器中的bean,我们可以使用单例模式、也可以使用工厂模式。甚至可以将bean放入request、session等作用域中。那么,如何处理bean?我们可以通过<bean>的scope属性设置,默认为singleton。
作用域 |
说明 |
singleton(默认) |
一个bean类型对应一个对象 |
prototype |
一个bean类型对应多个对象。每次从容器中取到的对象都是新对象 |
request |
在基于web的spring applicationcontext才有效。 |
session |
|
global session |
自动扫描将bean纳入IOC容器管理(spring2.5新增)
spring 2.5新增自动扫描bean的功能,大大简化了配置文件中的配置内容。将程序员从繁琐的配置中解放出来!xml文件需要增加声明:
<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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.sxt"/> <!-- 有了本配置,<context:annotation-config />可以不要。 --> <!-- 会扫描该包下的子类,以及该包子包下的子类 --> </beans> |
配置<bean>的根本目的,就是让spring容器知道这个bean是要加载的。我们也可以通过注解来实现让spring知道哪些bean需要加载。
◦ @Service:标记业务层bean
◦ @Controller:标记控制层,比如:struts中的Action
◦ @Repository:标记数据访问组件,即DAO类
◦ @Component:当组件不好归类时使用该标记
为我们相关类增加注解后,spring会自动扫描com.sxt包及该包下所有子类!这样就将我们从繁琐的配置文件配置中解放出来! 让我们使用spring更加简单!