Struts2与Spring集成中的自动装配策略
http://www.blogjava.net/jeffma/archive/2010/11/30/339414.html
自动装配即bean之间的依赖关系无需手动配置。
1. 与自动装配有关的配置
【org.apache.struts2.StrutsConstants类】
Ø // Spring应该如何装配。有效值:’name’, ’type’, ’auto’ 和’construtctor’。
STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE
Ø // 由STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE选择的自动装配策略是否总是受重视的。默认是false,遗留行为即试图根据情况决定最好的策略。设置为true表示使用STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE设置的自动装配策略。
STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE_ALWAYS_RESPECT
Ø 3(// Spring是否使用它的类缓存
STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE
2. 自动装配原理
首先根据在Struts.xml中定义Action时指定的class属性值获取Action实例
即appContext.getBean(beanName)
n 如果获取到,则直接返回。此时所使用的自动装配策略是applicationContext.xml中设置的装配策略。
applicationContext.xml中beans的默认自动装配策略是no,所以如果没有设置<beansdefault-autowire="autodetect">或者bean的autowire="byName",则Action中的属性比如personManager不会进行自动装配。
n 如果获取不到,则调用buildBean(beanClazz, extraContext)。
u 如果struts.objectFactory.spring.autoWire.alwaysRespect为true,此时会根据Struts定义的自动装配策略(struts.objectFactory.spring.autoWire)进行自动装配。
u 如果struts.objectFactory.spring.autoWire.alwaysRespect为false,则按constructor方式进行自动装配。
参考SpringObjectFactory.java源代码
@Override public Object buildBean(String beanName, Map<String, Object> extraContext,boolean injectInternal) throws Exception { Object o = null; try { o = appContext.getBean(beanName); } catch (NoSuchBeanDefinitionException e) { Class beanClazz = getClassInstance(beanName); o = buildBean(beanClazz, extraContext);//使用Struts定义的自动装配策略 } if (injectInternal) { injectInternalBeans(o); } return o; } |
public Object buildBean(Class clazz, Map<String, Object> extraContext) throwsException { Object bean; try { // Decide to follow autowire strategy or use the legacy approach which mixes injection strategies if (alwaysRespectAutowireStrategy) { // Leave the creation up to Spring bean = autoWiringFactory.createBean(clazz, autowireStrategy,false); injectApplicationContext(bean); return injectInternalBeans(bean); } else { bean = autoWiringFactory.autowire(clazz, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false); bean =autoWiringFactory.applyBeanPostProcessorsBeforeInitialization(bean, bean.getClass().getName()); // We don't need to call the init-method since one won't be registered. bean =autoWiringFactory.applyBeanPostProcessorsAfterInitialization(bean, bean.getClass().getName()); return autoWireBean(bean, autoWiringFactory); } } catch (UnsatisfiedDependencyException e) { if (LOG.isErrorEnabled()) LOG.error("Error building bean", e); // Fall back return autoWireBean(super.buildBean(clazz, extraContext),autoWiringFactory); } } |
所有有两种配置方式
第一种:参见1集成步骤中的配置
applicationContext.xml(配置beans的自动装配策略)
struts.xml中action的class属性值与application-context.xml的bean的id相同。
第二种:
applicationContext.xml(不配置beans的自动装配策略)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="login" class="com.jeff.action.LoginAction" scope="prototype"> </bean> <bean id="personManager" class="com.jeff.service.PersonManager" scope="prototype"> </bean> ... </beans> |
struts.xml(struts.xml中action的class属性值与application-context.xml的bean的id不同,而是设置为Action的类名)
<package name="first" extends="struts-default" > <action name="login1" class="com.jeff.action.LoginAction1"> <result>/loginInfo.jsp</result> </action> </package> |
第二种配置方式,struts.objectFactory.spring.autoWire才有可能起作用。
===============
http://hi.baidu.com/mefeng47/item/e5ed9d237b8e56172a0f1cea
truts2+spring 自动装配
struts2整合spring有两种方式
1、采用自动装配方式,即不在spring中注入action;
好处在于:不必在struts.xml中写了配置文件后,又在spring的配置文件中再写一遍配置
如:
在struts.xml中写
<action name="loginAction" class="com.lk.loginAction" />
就可以了。
可以写一个BaseAction 里面放入所有的service接口,其他Action继承它就可以根据自动装备的方式
自动注入自己需要的service.
2、在spring中注入action
缺点在于:
在struts.xml中写
<action name="loginAction" class="loginAction" />
同时在spring配置文件中需要写
<bean id="loginAction" class="com.lk.loginAction" >
<property ref="service" />
</bean>
这样看来配置文件要比第一种要繁琐一些。
但是据称这种方式。适合配置AOP的内容。而且struts2官方文档上也是采用的这种配置
Struts2与Spring集成中的自动装配策略相关推荐
- Spring中的自动装配和Autowired
彻底搞明白Spring中的自动装配和Autowired 一.自动装配 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性.比如,如果我们的应用上下文中只有一个 ...
- Spring学习5之自动装配Bean01
前言 之前我们都是手动装配Bean,但是Spring里面有一个自动装配的方法! 一.自动装配是什么? 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bea ...
- Spring依赖注入与自动装配
Spring依赖注入与自动装配 首先推荐狂神说的Spring讲义 1.Beans.xml作用 简而言之,我们通过在beans.xml中进行配置,将各种类交给spring来管理. 2.依赖注入 推荐狂神 ...
- Spring基于注解的自动装配
Spring基于注解的自动装配 基于XML的自动装配是在配置文件的bean里设置autowire属性,有byType,byName的方式.而基于注解的自动装配同样是这样只不过我们直接在成员变量上直接标 ...
- Spring之Bean的自动装配
Spring从入门到精通–(4)Spring之Bean的自动装配 作者:进击攻城狮 个人主页:欢迎访问我的主页 首发时间:2022年8月5日星期五 订阅专栏:Spring入门到精通 个人信条:星光不问 ...
- java的自动装配是什么意思_java – 什么时候在Spring中使用自动装配
我正在读书 Pro Spring 3.它有一个段落,真的让我困惑.这一段关于Spring的自动装配.这是一个摘录: In most cases, the answer to the question ...
- 《Spring中的自动装配》
/*** 自动装配[装配自定义的组件,或者装配spring底层的一些组件为我所用(需要组件实现xxxAware接口)]* Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值: ...
- Spring@Autowired注解与自动装配
1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...
- Spring学习7之自动装配Bean03
前言 接上节我们学习隐式的自动装配bean,今天我们学习用Java方式来配置bean! 一.如何用Java实现配置Bean 我们需要使用JavaConfig,一个配置类! 二.使用步骤 1.需要的实体 ...
最新文章
- 矿大计算机控制技术,潜心科研,匠心育人,来看看矿大这位带领国内顶尖团队的“大拿”的多面人生!...
- 微信小程序实例开发教程之知乎新闻
- C#阶乘类,可以精确计算大数的阶乘,10000的阶乘只要1.3秒左右
- nyoj-222 整数中的1
- 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?
- 2019.NET Conf China,.NET之崛起,已势不可挡
- 满足其中一个条件则可_农村分户好处多,但并非人人都可分户!满足这4个条件才可以申请...
- jQuery中的ready
- 推荐系统从0到1_1
- 【Java】聊天机器人
- 7、编译安装LAMP之apache与PHP整合
- 关于成立一个软件工作室
- 51822 proximity
- [tamarin系列之1] tamarin简介
- 菜狗的reverse学习——攻防世界xxxorrr
- poj 1575 Easier Done Than Said?【字符串处理】
- Python学习笔记:第十三站 接着找对象
- Android自定义View(二)
- js获取label标签中的value值
- 人形机器人——打篮球
热门文章
- [Python图像处理] 十五.图像的灰度线性变换
- iOS之深入解析依赖注入的原理与应用
- 【数据结构与算法】之组成和的完全平方数最少个数的求解思路与算法示例
- Linux把应用放在桌面上
- PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——Modern AI骨架脉络
- Python学习笔记(三) Python基础
- 使用C++实现YUV格式图像与RGB格式图像之间相互转换
- 【Qt】QModbusTcpClient类
- 闪灯什么意思_车灯闪1下、2下、3下各代表什么意思?关键时刻可以保命
- python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅