Spring中获取对象
Spring是一个非常主流,而且是好用的框架。提供管理对象的容器,提供事务的支持,缓存,权限认证(往往不用)。用来集成hibernate等。而管理对象的生命周期是其中一个非常重要的功能。在Spring中通过IOC可以轻松实现解耦,而开发人员则可以更专心于业务逻辑的编写。
第一种情况:管理Dao,Service,Manage等bean
配置的方式:(开发中一般以第二种居多)
1:通过xml
<bean id="messageHelper" class="com.dtsz.framework.core.spring.MessageHelper"/>
2:通过注解和扫描
2.1 指定扫描的范围:
<!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 --> <context:component-scan base-package="com.dtsz"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
这句话的意思就是,我扫描com.dtsz的包下bean。交给spring容器管理
2.2 通过注解标识bean
@Service @Transactional public class UserManager extends BaseService{ @Resource UserDao userDao; private static Logger logger = LoggerFactory .getLogger(UserManager.class); ........ }
在于将组件交给Spring容器管理。组件的名称默认是类名(首字母变小写),也可以自己修改:
@Component:当对组件的层次难以定位的时候使用这个注解
@Controller:表示控制层的组件
@Service:表示业务逻辑层的组件
@Repository:表示数据访问层的组件
使用的方式:
1:通过@Autowired 或者@Resource
@Controller @RequestMapping("/personInfoController") public class UserController { private static Logger logger = LoggerFactory .getLogger(UserController.class); @Resource UserManager userManager; ..... }
通过 这种方式,可以将@autowird写到 set方法,也可以直接写到对象声明上。
代码如下:
1 private JdbcTemplate jdbcTemplate 2 3 4 @Resource 5 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 6 this.jdbcTemplate = jdbcTemplate; 7 } 8 9 ......
2: 通过构造器注入
1 <bean name="springAction" class="com.dtsz.action.SpringAction"> 2 <constructor-arg index="0" ref="userDao"></constructor-arg> 3 <constructor-arg index="1" ref="userService"></constructor-arg> 4 </bean>
java代码中使用
1 public class SpringAction { 2 //注入对象springDao 3 private UserDao userDao; 4 private UserService userService; 5 6 public SpringAction(UserDao userDao,UserService userService){ 7 this.userDao = userDao; 8 this.userService = userService; 9 } 10 11 }
第二种情况 :在ApplicationContext环境外获取bean(比如webService,junit测试类)
1:继承 ServletContextListener
1 public class SpringContextListener implements ServletContextListener { 2 private static Logger logger = LoggerFactory 3 .getLogger(SpringContextListener.class); 4 private static ApplicationContext springContext; 5 6 public void contextDestroyed(ServletContextEvent event) { 7 // 暂时不写; 8 } 9 10 public void contextInitialized(ServletContextEvent event) { 11 System.out.println("####################初始化容器开始"); 12 springContext = WebApplicationContextUtils 13 .getWebApplicationContext(event.getServletContext()); 14 if (springContext == null) { 15 logger.warn("cannot find applicationContext"); 16 return; 17 } 18 19 System.out.println("####################初始化容器结束"); 20 } 21 22 public static ApplicationContext getApplicationContext() { 23 return springContext; 24 } 25 26 public static void setApplicationContext(ApplicationContext cxt) { 27 springContext = cxt; 28 } 29 30 }
2: applicationContentAware
作者:leader_Hoo
出处:http://www.cnblogs.com/ldh-better/
本文版权归作者和博客园共有,欢迎转载,唯一要求的就是请注明转载,此外,如果博客有帮助,希望可以帮忙点击推荐和分享,谢谢