自己的一些手记

(一) 依赖注入:又称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服务,不能重新部署,否则又会重新添加该包。当包当生冲突时,报异常。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值