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. 11154 LRC才不会告诉你们的事情

    #include<stdio.h> #include<string.h> int main() { ,t=; ],sum[],k=,d=; ]; ]; scanf(" ...

  2. 开涛spring3(6.8) - AOP 之 6.8 切面实例化模型

    所谓切面实例化模型指何时实例化切面. Spring AOP支持AspectJ的singleton.perthis.pertarget实例化模型(目前不支持percflow.percflowbelow ...

  3. 深入tornado中的http1connection

    前言 tornado中http1connection文件的作用极其重要,他实现了http1.x协议. 本模块基于gen模块和iostream模块实现异步的处理请求或者响应. 阅读本文需要一些基础的ht ...

  4. 导入数据到mysql服务器上,报错,以及停止的解决办法

    两次都是因为磁盘不够,这次得以解决: =>下面是可能会用到的命令行: 1.查看磁盘占用大小: df -hl 发现:   从上面看出来,根目录 / 下的东西沾满了  /dev/sda1  但是 / ...

  5. javaSE_Java第一周总结:有难度题目集合

    第一周练习总结 说明:尽量采用多种做法解决 1.使用三种方法实现变量交换 public class Test1Change{ public static void main(String[] args ...

  6. 高性能队列Disruptor系列1--传统队列的不足

    在前一篇文章Java中的阻塞队列(BlockingQueue)中介绍了Java中的阻塞队列.从性能上我们能得出一个结论:数组优于链表,CAS优于锁.那么有没有一种队列,通过数组的方式实现,而且采用无锁 ...

  7. Web前端性能优化全攻略

    网页制作poluoluo文章简介:Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多网站无情忽视的技术. Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多 ...

  8. 10.并发包阻塞队列之ArrayBlockingQueue

    上一节中对并发包中的非阻塞队列ConcurrentLinkedQueue的入队.出队做了一个简要的分析,本文将对并发包中的阻塞队列做一个简要分析. Java并发包中的阻塞队列一共7个,当然他们都是线程 ...

  9. Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法

    有时候我们的Macbook电脑运行某个程序卡在那里耗了很长时间,程序本身有可能提供了取消按钮,点了也没有反应,这时候我们就很想强制关闭它了,那么Macbook怎么强制关闭后台运行的程序呢?下面完美小编 ...

  10. .NET中使用Redis总结

    注:关于如何在windows,linux下配置redis,详见这篇文章:) 启动遇到问题 使用命令[redis-server.exe redis.windows.conf],启动redis 服务[如果 ...