1.依赖注入分为:设置注入和构造函数注入
1.1 设置注入的属性可以是基本类型,也可以是对象关键配置示例如下:
<bean id="" class="">
<property name="age" value="28"/>
<property name="stone" ref="bigStone"/>
</bean>
<bean id="bigStone" class="com.kerry.BigStone"/>
1.2 构造注入,通过构造函数注入,用index区分多个函数
<bean id="" class="">
<constructor-arg index="0">
<ref bean="bigStone"/>
<constructor-arg/>
<constructor-arg index="1">
<value> This is second parameter </value>
<constructor-arg/>
使用constructor-arg的type属性,避免构造子冲突
<constructor-arg index="3" type="string">
<value>This is third parameter</value>
<constructor-arg/>
</bean>
2 AOP
1 /** 2 * 3 */ 4 package com.dragon.study; 5 6 /** 7 * @author dragon 8 * 9 */ 10 public interface IStudent { 11 12 public void addStudent(String name); 13 } 14
目标类StudentImpl
2 * 3 */ 4 package com.dragon.study.Impl; 5 6 import com.dragon.study.IStudent; 7 8 /** 9 * @author dragon 10 * 11 */ 12 public class StudentImpl implements IStudent { 13 14 public void addStudent(String name) { 15 System.out.println( " 欢迎 " + name + " 你加入Spring家庭! " ); 16 } 17 } 18
前置通知:BeforeAdvice.java
package com.dragon.Advice; 5 6 import java.lang.reflect.Method; 7 8 import org.springframework.aop.MethodBeforeAdvice; 9 10 /** 11 * @author dragon 12 * 13 */ 14 public class BeforeAdvice implements MethodBeforeAdvice { 15 16 public void before(Method method,Object[] args, Object target) 17 throws Throwable { 18 19 System.out.println( " 这是BeforeAdvice类的before方法. " ); 20 21 } 22 }
后置通知:AfterAdvice.java
package com.dragon.Advice; 5 6import java.lang.reflect.Method; 7 8import org.springframework.aop.AfterReturningAdvice; 9 10/** 11 * @author dragon 12 * 13 */ 14public class AfterAdvice implements AfterReturningAdvice{ 15 16 public void afterReturning(Object returnValue ,Method method, 17 Object[] args,Object target) throws Throwable{ 18 System.out.println("这是AfterAdvice类的afterReturning方法."); 19 } 20 21 22}
环绕通知:CompareInterceptor.java
package com.dragon.Advice; 5 6import org.aopalliance.intercept.MethodInterceptor; 7import org.aopalliance.intercept.MethodInvocation; 8 9 10/** 11 * @author dragon 12 * 13 */ 14public class CompareInterceptor implements MethodInterceptor{ 15 16 public Object invoke(MethodInvocation invocation) throws Throwable{ 17 Object result = null; 18 String stu_name = invocation.getArguments()[0].toString(); 19 if ( stu_name.equals("dragon")){ 20 //如果学生是dragon时,执行目标方法, 21 result= invocation.proceed(); 22 23 } else{ 24 System.out.println("此学生是"+stu_name+"而不是dragon,不批准其加入."); 25 } 26 27 return result; 28 } 29}
配置文件applicationContext.xml
1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 3 4<beans> 5 6<bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean> 7<bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean> 8<bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean> 9<bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean> 10 11<bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean"> 12 <property name="proxyInterfaces"> 13 <value>com.dragon.study.IStudent</value> 14 </property> 15 <property name="interceptorNames"> 16 <list> 17 <value>beforeAdvice</value> 18 <value>afterAdvice</value> 19 <value>compareInterceptor</value> 20 </list> 21 </property> 22 <property name="target"> 23 <ref bean="studenttarget"/> 24 </property> 25 26</bean> 27 28 29 30 31</beans>
现在开始写测试类,Test.java
4package com; 5 6import org.springframework.context.ApplicationContext; 7import org.springframework.context.support.FileSystemXmlApplicationContext; 8 9import com.dragon.study.IStudent; 10 11/** 12 * @author dragon 13 * 14 */ 15public class Test { 16 17 /** 18 * @param args 19 */ 20 public static void main(String[] args) { 21 // TODO Auto-generated method stub 22 ApplicationContext ctx = 23 new FileSystemXmlApplicationContext("/com/dragon/applicationContext.xml"); 24 25 IStudent person = (IStudent)ctx.getBean("student"); 26 person.addStudent("dragon"); 27 28// person.addStudent("javadragon"); 29 } 30 31}
AOP部分代码来自 :http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html
时间: 2024-10-08 02:00:07