Spring注解@Component和@resource的使用
2015-08-21 10:06
459 查看
@Component(“”)和@resource(name=””)的使用:
spring的配置文件配置:
<?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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 扫描com.test 包,主要获取@Resource/@Component等--><context:component-scan base-package="com.test" /><beans>
配置<context:component-scan base-package="com.test" />解析:使用ClassPathXmlApplicationContext("bean.xml")初始化bean.xml的时候,或者说初始化spring配置文件的时候,会自动扫描com.test下的所有包,若发现有@component,则将该类初始化为一个对象,对象的key为@component("name")中指明的name,若不指明,则默认为类的名字首字母小写;当调用ctx.getBean("userService"),时,则查看容器是否有一个名字为userService;如有则在初始化这个类得过程中,如果发现@Resource(name=”u”);则查看容器是否有名字叫u的bean,若有则将u注入到方法参数中,而后参数就会传人方法内,当然也就注入了成员变量里:
UserService.java文件中使用:@Component("userService")public class UserService { private UserDAO userDAO = new UserDAOImpl(); private UserLogDAO userLogDAO; public UserDAO getUserDAO() { return userDAO; } public UserLogDAO getUserLogDAO() { return userLogDAO; } @Resource(name="ulog") public void setUserLogDAO(UserLogDAO userLogDAO) { this.userLogDAO = userLogDAO; } @Resource(name="u") public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO;
}
UserDAOImpl.java中使用: @Component("u")public class UserDAOImpl implements UserDAO { private SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } @Resource public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public void save(User u) { Session s=sessionFactory.openSession();//.getCurrentSession(); //s.beginTransaction(); s.save(u); System.out.println("a user save,XXXX!"); }
}
spring的配置文件配置:
<?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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 扫描com.test 包,主要获取@Resource/@Component等--><context:component-scan base-package="com.test" /><beans>
配置<context:component-scan base-package="com.test" />解析:使用ClassPathXmlApplicationContext("bean.xml")初始化bean.xml的时候,或者说初始化spring配置文件的时候,会自动扫描com.test下的所有包,若发现有@component,则将该类初始化为一个对象,对象的key为@component("name")中指明的name,若不指明,则默认为类的名字首字母小写;当调用ctx.getBean("userService"),时,则查看容器是否有一个名字为userService;如有则在初始化这个类得过程中,如果发现@Resource(name=”u”);则查看容器是否有名字叫u的bean,若有则将u注入到方法参数中,而后参数就会传人方法内,当然也就注入了成员变量里:
UserService.java文件中使用:@Component("userService")public class UserService { private UserDAO userDAO = new UserDAOImpl(); private UserLogDAO userLogDAO; public UserDAO getUserDAO() { return userDAO; } public UserLogDAO getUserLogDAO() { return userLogDAO; } @Resource(name="ulog") public void setUserLogDAO(UserLogDAO userLogDAO) { this.userLogDAO = userLogDAO; } @Resource(name="u") public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO;
}
UserDAOImpl.java中使用: @Component("u")public class UserDAOImpl implements UserDAO { private SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } @Resource public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public void save(User u) { Session s=sessionFactory.openSession();//.getCurrentSession(); //s.beginTransaction(); s.save(u); System.out.println("a user save,XXXX!"); }
}
使用上述的@Component和@resource注解,相当于spring使用了如下的配置:这样就可以省去之前在bean中所写的:<!-- <bean id="u" class="com.test.dao.impl.UserDAOImpl"> </bean> <bean id="UserService" class="com.test.service.UserService"> <property name="UserDAO" ref="u" /> </bean>
相关文章推荐
- [Java] 读取文件
- java学习之内部类
- Spring中@Component注解,@Controller注解详解
- 如何安装配置gradle及eclipse的结合
- java.sql.SQLException: Access denied for user 'root'@'gy-pc' (using password: YES)
- eclipse常用的快捷键(一)
- JAVA相关环境变量配置随笔
- MyEclipse默认workspace路径的设置
- SpringMVC学习之@ModelAttribute运用详解
- Spring源代码解析(收藏)
- Spring注解@Component、@Repository、@Service、@Controller区别
- Str问题java.lang.IllegalStateException: getOutputStream() has already been called for this response的解决
- netbeans8 一些配置
- 删除某个目录及目录下的所有子目录和文件
- Java 将文件打包成 tar 文件
- Java泛型的使用
- JAVA字符串与字符编码处理
- java 创建并写入文件
- Java轻量级锁原理详解(Lightweight Locking)
- Java偏向锁实现原理(Biased Locking)