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); ........
}
使用的方式:
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中获取对象的更多相关文章
- spring中获取dao或对象中方法的实例化对象
spring中获取dao的中方法的实例化对象: //获取应用上下文对象 ApplicationContext ctx = new ClassPathXmlApplicationContext(&quo ...
- Spring中获取被代理的对象
目录 Spring中获取被代理的对象 获取Spring被代理对象什么时候可能会用到? Spring中获取被代理的对象 Spring中获取被代理的对象 ### 获取Spring被代理对象的JAVA工具类 ...
- 5.3:从bean的实例中获取对象
5.3 从bean的实例中获取对象 在getBean方法中,getObjectForBeanInstance是个高频率使用的方法,无论是从缓存中获得bean还是根据不同的scope策略加载bean. ...
- spring中获取当前项目的真实路径
总结: 方法1: WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext ...
- Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第4节: recycler中获取对象
Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第四节: recycler中获取对象 这一小节剖析如何从对象回收站中获取对象: 我们回顾上一小节demo的ma ...
- asp.net core不通过构造方法从容器中获取对象及解决通过这种方法NLog获取对象失败的问题
一般想从容器中获取对象,我们都是通过构造方法获取对象,但有些条件不允许不能通过构造方法获取对象,我们必须单独从容器中单独创建获取找个对象,这样我们就不行把找个容器静态保存起来供全局diaoy 一. 简 ...
- Spring源码分析(十四)从bean的实例中获取对象
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 在getBean方法中,getObjectForBeanlnstance ...
- Spring中获取request的几种方法,及其线程安全性分析
前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...
- [No000016E]Spring 中获取 request 的几种方法,及其线程安全性分析
前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...
随机推荐
- 11154 LRC才不会告诉你们的事情
#include<stdio.h> #include<string.h> int main() { ,t=; ],sum[],k=,d=; ]; ]; scanf(" ...
- 开涛spring3(6.8) - AOP 之 6.8 切面实例化模型
所谓切面实例化模型指何时实例化切面. Spring AOP支持AspectJ的singleton.perthis.pertarget实例化模型(目前不支持percflow.percflowbelow ...
- 深入tornado中的http1connection
前言 tornado中http1connection文件的作用极其重要,他实现了http1.x协议. 本模块基于gen模块和iostream模块实现异步的处理请求或者响应. 阅读本文需要一些基础的ht ...
- 导入数据到mysql服务器上,报错,以及停止的解决办法
两次都是因为磁盘不够,这次得以解决: =>下面是可能会用到的命令行: 1.查看磁盘占用大小: df -hl 发现: 从上面看出来,根目录 / 下的东西沾满了 /dev/sda1 但是 / ...
- javaSE_Java第一周总结:有难度题目集合
第一周练习总结 说明:尽量采用多种做法解决 1.使用三种方法实现变量交换 public class Test1Change{ public static void main(String[] args ...
- 高性能队列Disruptor系列1--传统队列的不足
在前一篇文章Java中的阻塞队列(BlockingQueue)中介绍了Java中的阻塞队列.从性能上我们能得出一个结论:数组优于链表,CAS优于锁.那么有没有一种队列,通过数组的方式实现,而且采用无锁 ...
- Web前端性能优化全攻略
网页制作poluoluo文章简介:Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多网站无情忽视的技术. Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多 ...
- 10.并发包阻塞队列之ArrayBlockingQueue
上一节中对并发包中的非阻塞队列ConcurrentLinkedQueue的入队.出队做了一个简要的分析,本文将对并发包中的阻塞队列做一个简要分析. Java并发包中的阻塞队列一共7个,当然他们都是线程 ...
- Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法
有时候我们的Macbook电脑运行某个程序卡在那里耗了很长时间,程序本身有可能提供了取消按钮,点了也没有反应,这时候我们就很想强制关闭它了,那么Macbook怎么强制关闭后台运行的程序呢?下面完美小编 ...
- .NET中使用Redis总结
注:关于如何在windows,linux下配置redis,详见这篇文章:) 启动遇到问题 使用命令[redis-server.exe redis.windows.conf],启动redis 服务[如果 ...