手动创建(new)对象,使用spring容器中的bean(ServletContext)。

场景:一个不受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实现类

 

@Service
public class BuyerServiceImplTest1 implements ServletContextAware,XxxService{
	private static ServletContext servletContext;

	@Override
	public void setServletContext(ServletContext servletContext) {
		BuyerServiceImplTest1.servletContext = servletContext;
	}
	
	public BuyerServiceImplTest1(){
	}



 

你可能感兴趣的:(手动创建(new)对象,使用spring容器中的bean(ServletContext)。)