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方法,也可以直接写到对象声明上。

代码如下: 

 private JdbcTemplate jdbcTemplate

   @Resource
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} ......

2: 通过构造器注入

 <bean name="springAction" class="com.dtsz.action.SpringAction">
<constructor-arg index="0" ref="userDao"></constructor-arg>
<constructor-arg index="1" ref="userService"></constructor-arg>
</bean>

java代码中使用

 public class SpringAction {
//注入对象springDao
private UserDao userDao;
private UserService userService; public SpringAction(UserDao userDao,UserService userService){
this.userDao = userDao;
this.userService = userService;
} }

第二种情况 :在ApplicationContext环境外获取bean(比如webService,junit测试类)

1:继承 ServletContextListener

 public class SpringContextListener implements ServletContextListener {
private static Logger logger = LoggerFactory
.getLogger(SpringContextListener.class);
private static ApplicationContext springContext; public void contextDestroyed(ServletContextEvent event) {
// 暂时不写;
} public void contextInitialized(ServletContextEvent event) {
System.out.println("####################初始化容器开始");
springContext = WebApplicationContextUtils
.getWebApplicationContext(event.getServletContext());
if (springContext == null) {
logger.warn("cannot find applicationContext");
return;
} System.out.println("####################初始化容器结束");
} public static ApplicationContext getApplicationContext() {
return springContext;
} public static void setApplicationContext(ApplicationContext cxt) {
springContext = cxt;
} }

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. Java基础知识二次学习--第四章 异常

    第四章 异常处理   时间:2017年4月26日11:16:39~2017年4月26日11:28:58 章节:04章_01节 04章_02节 视频长度:20:46+01:16 内容:异常的概念 心得: ...

  2. MySQL主从同步报错故障处理集锦

    前言 在发生故障切换后,经常遇到的问题就是同步报错,下面是最近收集的报错信息. 记录删除失败 在master上删除一条记录,而slave上找不到 Last_SQL_Error: Could not e ...

  3. JSP/Servlet Web 学习笔记 DayTwo

    JSP指令 a)page指令 定义JSP文件中的全局属性.一个JSP页面可以包含多个page指令.除了Import以外,其他page指令定义的属性/值只能出现一次. 其详细语法为: <%page ...

  4. 将 FFmpeg 移植到 Android平台 (完整版)

    首先需要去FFmpeg的官网http://www.ffmpeg.org/去下载FFmpeg的源码,目前的版本号为FFmpeg3.3(Hilbert). 下载的文件为压缩包,解压后得到ffmpeg-3. ...

  5. Win95+IE3 – Win10+IE11全版本执行漏洞(含POC)

    微软本月安全更新修复了一个潜藏了18年的IE远程代码执行漏洞(CVE-2014-6332),可以说是给windows吃了一颗大补丸.缺陷出现在VBScript的代码中,自Windows 95首次发布( ...

  6. C# 委托的理解

    1.什么是委托 委托可以理解为持有一个或多个方法的对象.如果执行委托的话,委托会 执行它所"持有"的方法.委托可以避免程序中大量使用if-else语句,使 程序拥有更好的扩展性. ...

  7. 微软SQL Server认证最新信息(17年5月22日更新),感兴趣的进来看看哟

    之前一直有在关注微软认证的一些消息,由于最新的SQL Server认证加入了2016的相关内容,导致课程资料需要大部分更新,但是微软更新相对比较慢,并且经常改版,目前发现的最新的MCP Cert Pa ...

  8. IntelliJ IDEA提示:Error during artifact deployment. See server log for details.

    IntelliJ IDEA-2017.1.1 tomcat-8.5.13   问题:在IntelliJ IDEA中使用tomcat部署web app时,提示:Error during artifact ...

  9. Java之IO流详解

    IO流 Input/Output 完成输入/输出 应用程序运行时——数据在内存中  ←→ 把数据写入硬盘(磁带)  内存中的数据不可持久保存的  输入:从外部存储器(硬盘.磁带.U盘)把数据读入内存. ...

  10. 转化来的图标用法symbol引用‘font-class引用及Unicode引用