Spring是一个非常主流,而且是好用的框架。提供管理对象的容器,提供事务的支持,缓存,权限认证(往往不用)。用来集成hibernate等。而管理对象的生命周期是其中一个非常重要的功能。在Spring中通过IOC可以轻松实现解耦,而开发人员则可以更专心于业务逻辑的编写。

第一种情况:管理Dao,Service,Manage等bean

配置的方式:(开发中一般以第二种居多)

  1:通过xml  

  1. <bean id="messageHelper" class="com.dtsz.framework.core.spring.MessageHelper"/>

  2:通过注解和扫描

     2.1  指定扫描的范围:

  1. <!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->
  2. <context:component-scan
  3. base-package="com.dtsz">
  4. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  5. </context:component-scan>

这句话的意思就是,我扫描com.dtsz的包下bean。交给spring容器管理

  2.2 通过注解标识bean

  1. @Service
  2. @Transactional
  3. public class UserManager extends BaseService{
  4. @Resource
  5. UserDao userDao;
  6.  
  7. private static Logger logger = LoggerFactory
  8. .getLogger(UserManager.class);
  9.  
  10. ........
  11. }
在于将组件交给Spring容器管理。组件的名称默认是类名(首字母变小写),也可以自己修改:
@Component:当对组件的层次难以定位的时候使用这个注解
@Controller:表示控制层的组件
@Service:表示业务逻辑层的组件
@Repository:表示数据访问层的组件

使用的方式:

  1:通过@Autowired  或者@Resource

  1. @Controller
  2. @RequestMapping("/personInfoController")
  3. public class UserController {
  4.  
  5. private static Logger logger = LoggerFactory
  6. .getLogger(UserController.class);
  7. @Resource
  8. UserManager userManager;
  9.  
  10. .....
  11. }

通过 这种方式,可以将@autowird写到 set方法,也可以直接写到对象声明上。

代码如下: 

  1. private JdbcTemplate jdbcTemplate
  2.  
  3. @Resource
  4. public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  5. this.jdbcTemplate = jdbcTemplate;
  6. }
  7.  
  8. ......

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

Spring中获取对象的更多相关文章

  1. spring中获取dao或对象中方法的实例化对象

    spring中获取dao的中方法的实例化对象: //获取应用上下文对象 ApplicationContext ctx = new ClassPathXmlApplicationContext(&quo ...

  2. Spring中获取被代理的对象

    目录 Spring中获取被代理的对象 获取Spring被代理对象什么时候可能会用到? Spring中获取被代理的对象 Spring中获取被代理的对象 ### 获取Spring被代理对象的JAVA工具类 ...

  3. 5.3:从bean的实例中获取对象

    5.3  从bean的实例中获取对象 在getBean方法中,getObjectForBeanInstance是个高频率使用的方法,无论是从缓存中获得bean还是根据不同的scope策略加载bean. ...

  4. spring中获取当前项目的真实路径

    总结: 方法1: WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext ...

  5. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第4节: recycler中获取对象

    Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第四节: recycler中获取对象 这一小节剖析如何从对象回收站中获取对象: 我们回顾上一小节demo的ma ...

  6. asp.net core不通过构造方法从容器中获取对象及解决通过这种方法NLog获取对象失败的问题

    一般想从容器中获取对象,我们都是通过构造方法获取对象,但有些条件不允许不能通过构造方法获取对象,我们必须单独从容器中单独创建获取找个对象,这样我们就不行把找个容器静态保存起来供全局diaoy 一. 简 ...

  7. Spring源码分析(十四)从bean的实例中获取对象

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 在getBean方法中,getObjectForBeanlnstance ...

  8. Spring中获取request的几种方法,及其线程安全性分析

    前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...

  9. [No000016E]Spring 中获取 request 的几种方法,及其线程安全性分析

    前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...

随机推荐

  1. cocoapods安装和使用常见问题及解决方案

    cocopods安装后pod install出现以下错误 /usr/local/Cellar/ruby/2.4.1_1/lib/ruby/2.4.0/rubygems.rb:270:in find_s ...

  2. javaWeb学习总结(4)- HttpServletResponse

    一.简介: Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和 ...

  3. 开涛spring3(3.3) - DI 之 3.3 更多DI的知识

    3.3.1  延迟初始化Bean 延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean. 配置方式很简单只需在<bean>标签上指定 “lazy- ...

  4. 纯css实现多标签浮动居中(任意个数)

    在做的一个网页上有一块要用浮动标签,具体就是网页底部有未知数量,未知尺寸的元素要水平居中,有点类似于分页器. 首先,我们先新建一个容器con,就是标签的爸爸,用来控制标签在页面的位置,.father{ ...

  5. VR全景智慧城市——商家的需求才是全景市场的核心竞争力

    消费者视角痛点:比如酒店消费行业,很多消费者在预订酒店过程中,都遇到过这样的场景:网上照片里酒店房间看着宽敞明亮,格调不凡,感觉非常喜欢,等真正推开房门插上房卡一看,却大失所望.在酒店行业,网上照片和 ...

  6. Navicat for mysql 11.1.20激活

    由于最近工作太忙,一直没有机会分享自己在工作中遇到的困难,今天周日,在出去之前先分享下navicat(版本很重要navicat_trial_11.1.20.0.1449226634)激活. 刚开始我是 ...

  7. nodeJS实现简单网页爬虫功能

    前面的话 本文将使用nodeJS实现一个简单的网页爬虫功能 网页源码 使用http.get()方法获取网页源码,以hao123网站的头条页面为例 http://tuijian.hao123.com/h ...

  8. vue2入坑随记(二) -- 自定义动态组件

    学习了Vue全家桶和一些UI基本够用了,但是用元素的方式使用组件还是不够灵活,比如我们需要通过js代码直接调用组件,而不是每次在页面上通过属性去控制组件的表现.下面讲一下如何定义动态组件. Vue.e ...

  9. JavaMail API

    JavaMail API的核心类:会话.消息.地址.验证程序.传输,存储和文件夹.所有这些类都可以在JavaMail API即javax.mail的顶层包中找到,尽管你将频繁地发现你自己使用的子类是在 ...

  10. Oracle ORA-39726压缩表删除字段处理方法

    今天在往一个压缩表增加一个字段可以增加成功,但在删除的时候报了个ORA-39726 unsupported add/drop column operation on compressed tables ...