(一) 依赖注入:又称DI,即Dependency Injection,强制将组件的构建和使用分开,在运行前将接口的实现组装到程序中运行。
依赖注入是在xml文件中的<beans>节点中配置<bean>节点,然后在测试类中获取,获取方式有两种:
1) ApplicationContext ct=new ClassPathXmlApplicationContext("xml文件");
再获取相应的类
ct.getBean("相应类的bean的id");从配置文件中获取对应类.
2) ApplicationContext ct=new FileSystemXmlApplicationContext("xml文件的详细路径");
ct.getBean("相应类的bean的id");从配置文件中获取对应类.
(二) 面向方(切)面编程:AOP,即Aspect-Oriented Programming。
方式1:
1) 如果用到AOP编程,在添加Spring框架时,勾选Spring2.0 AOP Libraries包。
2) 在xml文件设计视图中,配置命名空间,右击选择Edit Namespaces -> Add -> 选择单选按钮Specify New Namespace -> Browser -> select xml Catalog entry -> 选择:http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 导入切面编程的包 -> 再选择别名
3) 配置<aop:pointcut>切入点和通知节点<aop:advisor>
<aop:config>
<aop:pointcut id="命一个切入点名" expression="execution (* 包名.类名.方法名(..))"/>
<aop:advisor pointcut-ref="切入点名称" advice-ref="通知类的id"/>
</aop:config>
注:切入节点中的expression属性为固定格式,第一个“*”表示private、public、protect……等等所有的修饰符。而通知节点中advice-ref属性则表示在xml文件中配好了的<bean>节点id,<bean>节点专门用来配置类。
在测试类中获取时,
4) 补充:通知分为前置通知、后置通知、环绕通知、还有异常通知。前置通知是在方法执行前自动执行的通知;后置通知是在方法执行后自动执行的通知;环绕通知能力最强,它可以在方法调用前执行通知代码,可以决定是否还调用目标方法;异常通知是方法抛出异常时自动执行的方面代码。调用以上通知,分别要实现各种接口:MethodBeforeAdvice、AfterReturningAdvice、MethodInterceptor、ThrowsAdvice。
5) 分别要实现的方法为:
i. 前置通知:
public void before(Method m, Object[] args, Object target)
throws Throwable {
}
其中target表示目标对象,m和args分别表示该以对象的方法和参数。
ii. 后置通知:
public void afterReturning(Object arg0, Method m, Object[] args,
Object target) throws Throwable {
// TODO Auto-generated method stub
}
iii. 环绕通知:
public Object invoke(MethodInvocation invocation) throws Throwable {
// TODO Auto-generated method stub
before();
invocation.proceed();
after();
return null;
}
public void before(){
}
public void after(){
}
iv. 异常通知:
public void afterThrowing(Method m,Object[] args,Object target,Throwable subclass){
}
方式 2: 其中proxyFactoryBean表示在xml文件中绑定的目标类,它主要针对的是在xml文件中进行的如下所配置:
<bean id=”proxyFactoryBean”
class=”org.springframework.aop.framework.ProxyFactoryBean”>
<property name=”target”>
<ref bean=”目标类的bean的id”>
</property>
<property name=”interceptorNames”>
<list>
<value>通知类的bean的id</value>
</list>
</property>
</bean>
注意获取时与上述方式有点不同,是用ApplicationContext ct=new FileSystemXmlApplicationContext(”xml详细路径”);
ct.getBean(“proxyFactoryBean”);
(三) 整合Structs、Hibernate、Spring三大框架:
步骤:
1. 创建一个web project工程
2. 先导入Spring框架,选择:① pring2.0 AOP Librariexs 、② pring2.0 Core(核心) Libraries 、 ③ Spring2.0 Persistence(持久) Libraries 、④Spring2.0 Web Libraries、⑤Hibernate 3.2 Core Libraries
3. 导入Hibernate框架,此时不再选择Hibernate核心包,以免与先前加入的Spring框架中加入Hiberante的核心包发生版本冲突,再输入SessionFactory id 为sessionFactory。
4. 导入Structs框架。
5. 配置Spring的xml文件:加入aop和spring-tx-2.0.tsd命名空间,加入方式同上述方式1中配置AOP命名方式一样。
a) 配置一个事件管理器
<bean id=”txManager” class=”org.springframework.orm.hibernateTranact.Manager”>
<property name=”sessionFactory” ref=”sessionFactory” />
</bean>
b) 配置事务处理(通知)
<tx:advice id="txAdvice" transaction-manager="txManager" >
<tx:attributes>
<tx:method name="方法名(get*表示以get开头的方法)"read-only="true(false)" propagation="创建新事务的类型"/>
</tx:attributes>
</tx:advice>
新的事务类型有:supports:表示如果原来有事务就调用它,没有就不调用。
Required:如果原来存在就调用,没有就新建。
Required-new:当前方法必须运行在自己的事务里。
Never:当前方法不应该运行在一个事务上下文中。
Mandatory:表示当前方法必须运行在一个事务上下文中。
c) 配置AOP:事务通知指向上述定义的<tx:advice>,而切点则指向<aop:pointcut>,如:
<aop:config>
<aop:pointcut id="txDAO" expression="execution (* com.accp.po.*.*(..))"/>
<aop:advisor pointcut-ref="txDAO" advice-ref="txAdvice"/>
</aop:config>
d) 配好之后,再开始各种业务实现。
注意:b、c配置表示在执行某个切面下的一些方法时,去判断哪些方法中是否存在事务管理,即是否存在sessionFactory这个对象。
6. 注意:
a) 在利用Hibernate中反向生成工程时,要记得勾选Java Data Access Object这个复选框,之后会生成一个以DAO结尾的java文件,配置文件中也有相应的改变。
b) 上述生成的DAO文件如果作为一个实现类,则要实现一个接口,这个接口用于对数据库操作时,获取getBean()时作为类型,否则则报类型不匹配异常。
c) 在struts启动时,将ClassPathXmlApplicationContext加载到程序中,只需在struts-config.xml文件中配置一个插件:
<plug-in className="org.springframework.web.struts.ContextLoaderPluIn">
<set-property property="contextConfigLocation" value="classpath:applicationContext.xml(spring配置文件的位置)"/>
</plug-in>
d) 在spring配置文件中配置一个<bean>节点,指向的是struts中的Action中的一个属性(指的是前面定义的接口,要get、set方法)用于获取DAO文件,对数据库进行操作,注意<bean>节点中的name属性应该为struts配置文件中<action>节点的path属性值。
e) 在struts配置文件中,<action>节点中的type属性改为:org.springframework.web.struts.DelegatingActionProxy。用于当struts启动时就实例化DAO文件。
f) 如果struts导入的包与spring导入的包发生冲突,则要删除asm-2.2.3.jar这个包,再重启Tomcat服务,不能重新部署,否则又会重新添加该包。当包当生冲突时,报异常。
分享到:
相关推荐
除此之外,《匠人手记》还可能包含了一些实战案例,通过实际项目的介绍,让读者了解如何将理论知识应用到实践中,提升解决实际问题的能力。这些案例可能涵盖了从简单的小型控制系统到复杂的嵌入式系统设计。 总的来...
《匠人手记》11《按键漫谈》一文由程序匠人撰写,深入探讨了按键处理在单片机编程中的重要性及其基础技术。文章不仅为新手提供了入门指导,同时也涵盖了按键处理中的一些高级概念和技术细节。 ### 按键时序分析 ...
经常会有随手记录一些事情的习惯,可是手机自带的日历用得不够方便,于是想按照自己的使用习惯来开发一个程序,取名“手记”,随想随记! 功能列表: 手记增删查改及持久化 附件源码,情枫版权,侵权不究! ...
以下是一些关于MATLAB GUI设计的重要知识点: 1. **组件库**:在GUIDE中,你可以找到各种组件,如按钮、文本框、滑块、菜单等,它们是构建GUI的基础元素。 2. **回调函数**:当用户与GUI组件交互时,比如点击按钮...
书中可能讲解了如何使用C语言进行单片机编程,并介绍了一些常用的开发环境,如Keil、IAR或GCC等,以及如何使用它们进行代码编写、编译和调试。 此外,单片机的应用实例是学习过程中的宝贵资源。作者可能会分享他在...
最后,匠人手记可能会探讨一些软技能,如如何有效地学习新的硬件或软件技术,如何与团队协作,以及如何持续改进自己的工作流程。这些软技能对于任何工程师的成长都是至关重要的。 总的来说,“匠人的手记”是一个...
为了提升Fedora系统的网络功能,可以安装一些插件来增强使用体验。例如,fastestmirror插件能够让yum包管理器自动检测并使用最快源来下载软件包,而yum-presto插件则能够加速下载过程。这些插件的安装通过简单的yum...
在《iBATIS 3 试用手记三》中,作者可能还会分享一些实战经验,如如何解决常见的问题,如何优化性能,以及如何利用iBATIS 3的高级特性进行复杂业务的处理。通过对iBATIS 3的深入学习和实践,开发者可以提升自己的...
在"MATLAB GUI设计学习手记第2版"中,作者深入浅出地介绍了如何利用MATLAB构建自己的用户界面。 首先,MATLAB GUI设计的核心在于 GUIDE(Graphical User Interface Development Environment),这是一个可视化工具...
该版本的发布,是在Red Hat之后,但它试图打破传统的束缚,塑造自己独特的品牌形象,这一点从发布时间上的安排便可见一斑。 在个人使用体验方面,作者在手记中回顾了Mandrake Linux 8.0给他们带来的深刻印象,并对...
《信号完整性揭秘——于博士SI设计手记》是一本深入探讨信号完整性的专业书籍,适合电子工程师、硬件设计师以及对高速数字系统感兴趣的读者。信号完整性是现代电子设计中不可或缺的一个重要概念,它涉及到如何在高速...
本书的作者通过自己的实践经验和深入思考,为我们揭示了单片机设计与应用的诸多奥秘。以下是基于标题和描述中涉及的知识点的详细解读: 1. **基础知识**:书中可能会涵盖单片机的基本组成,包括CPU、内存、I/O端口...
企业评估概况 截止2002年2月5日,中国软件企业通过cmm评估的基本情况如下: 东软cmm手记 实施原因: 国内东软从1991年开始,从事国际业务和外包业务,1997年开始介入外方核心业务的开发。1999年底,在东软给日方...
- 利用芯片自己的GPIO口方法则无需额外硬件支持,是一种成本低且便于实现自动化的方案,适合于一些需要频繁升级的应用场景。 掌握这些技术点,可以让开发人员在面对产品固件升级需求时有更多的解决方案可供选择,...
在《Wicket 1.4 开发手记》系列的第一篇文章中,作者Steel.Ma分享了他对Wicket框架的一些见解,特别是针对Wicket 1.4版本的入门级介绍。文章首先对当前流行的开发模式SSH(Struts、Spring、Hibernate)进行了批判性的...
企业需要根据自己的产品特性和目标市场的特点选择合适的营销渠道。 4. 用户洞察与行为分析:营销增长的实战中,用户洞察是一个重要环节。企业需要通过市场调研、用户访谈、数据分析等手段深入理解用户需求、消费...
《Oracle DBA手记2:数据库诊断案例与内部恢复实践》是一本专注于Oracle数据库管理和故障排除的专业书籍。作为DBA(数据库管理员),掌握数据库的诊断和恢复技术是至关重要的,因为这直接影响到系统的稳定性和数据的...