手动创建(new)对象,使用spring容器中的bean(ServletContext)。
2016-12-30 14:58
465 查看
场景:一个不受spring管理的静态工厂方法,根据传入的参数不同,返回不同的实现类对象(关键点:实现类对象需要使用spring容器中的数据访问层对象dao或mapper)。
疑难点:如何从spring容器中获取bean,并注入到自己new出来的对象中。
解决方案:使用spring的autoware机制+static,spring的autoware自动装配:只要类实现了ServletContextAware接口,web容器初始化时,就会将servletcontext注入到该类中(注意该类在spring的ioc容器中,自己new出来的类spring是不会帮你注入的),但是静态工厂方法又需要自己亲手new,该怎么办呢?。。。这时我们使用static关键字修饰spring注入的servletContext,以达到共享使用servletContext的效果(注意:这时不是spring帮你注入了,而是第一次spring自己创建对象,它把servletContext注入到它可以管理的bean中,而该bean的servletcontext是用static关键字修饰的-存放到了内存区中;我们再次new时使用的是内存区中的servetContext)。
缺点:spring创建的bean对象,我们并没有使用(使用的是自己new出来的对象),浪费了该资源。
service实现类
疑难点:如何从spring容器中获取bean,并注入到自己new出来的对象中。
解决方案:使用spring的autoware机制+static,spring的autoware自动装配:只要类实现了ServletContextAware接口,web容器初始化时,就会将servletcontext注入到该类中(注意该类在spring的ioc容器中,自己new出来的类spring是不会帮你注入的),但是静态工厂方法又需要自己亲手new,该怎么办呢?。。。这时我们使用static关键字修饰spring注入的servletContext,以达到共享使用servletContext的效果(注意:这时不是spring帮你注入了,而是第一次spring自己创建对象,它把servletContext注入到它可以管理的bean中,而该bean的servletcontext是用static关键字修饰的-存放到了内存区中;我们再次new时使用的是内存区中的servetContext)。
缺点:spring创建的bean对象,我们并没有使用(使用的是自己new出来的对象),浪费了该资源。
service实现类
@Service public class BuyerServiceImplTest1 implements ServletContextAware,BuyerService{ private static ServletContext servletContext; @Override public void setServletContext(ServletContext servletContext) { BuyerServiceImplTest1.servletContext = servletContext; } public BuyerServiceImplTest1(){ }静态工厂方法
public class StaticService { public static BuyerService getBuyerService(String serviceFlag){ if("1".equals(serviceFlag)){ return new BuyerServiceImplTest1(); } return null; } }使用静态工厂方法获取实现类
public void saveUserLoginInfoToRedis(String uniqueKey, String username) { BuyerService buyerService = StaticService.getBuyerService("1"); System.out.println(buyerService); Buyer buyerFirstTest = buyerService.getBuyerByUsername(null); System.out.println(buyerFirstTest.getRealName());
相关文章推荐
- 使用spring配置C3P0连接池 并通过手动获取spring的ApplicationContext和bean对象使用库连接。
- 2. 使用Spring容器创建bean
- Spring学习(三)使用Spring容器创建bean
- Spring IOC 容器源码分析 - 创建原始 bean 对象
- spring-01 spring的bean管理(使用配置文件方式创建对象 附代码)
- 【Spring】手动获取spring容器对象时,报no qualifying bean of type is defined
- Spring 为了将spring容器和对象的创建在服务器启动时创建(并且只创建一次),将其放在servletContext的监听器内执行。参数名contextConfigLocation哪里找?
- 88——小案例,dao,service,action,使用IOC容器创建对象,不是维护在bean内部(8条)
- spring容器创建对象的3种方式(bean的实例化)
- spring-02 spring的bean管理(使用注解方式创建对象 附代码)
- spring学习教程7-spring容器创建bean对象的方式以及如何处理多个spring配置文件
- 第36天(就业班) spring引入、专业术语、spring六大模块、bean创建对象的细节、IOC容器、对象依赖关系、自动装配、注解方式
- 创建Bean的三种方式 在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法。实际上,Sprin
- spring容器创建对象的3种方式(bean的实例化)
- 在spring 中如果使用new创建一个对象时 这个对象将不在受spring管理器管理
- 使用spring配置C3P0连接池 并通过手动获取spring的ApplicationContext和bean对象使用库连接
- 【Spring源码--IOC容器的实现】(五)Bean对象的创建
- Spring 使new方法创建的对象可以引用spring管理的bean.
- JS中用new 创建对象及在构造函数中return的使用
- 如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉