Spring框架标签

1.开启Spring组件自动扫描机制

<context:component-scan base-package = “com.lovo”></context:component-scan >

该自动扫描机制由spring容器自动提供,扫描定义在base-package包下面的所有java文件,并且还会扫描子包或者说子包中所有使用了以下注解的JAVA类

@Controller表现层组件

@Service业务层组件

@Respository需要被spring容器管理的持久层组件

@Component将没有在以上几个层的Java类纳入到容器管理

以下两个都可以放在set方法上方或者属性上方

@Autowrited自动装配(byType),也可以称之为:模糊装配,放在构造的上方

@Qualifier(value=”类名(首字母小写)”),精确装配(byName),放在构造参数前面

@Resource(name=”  ”)可以用name属性指定具体装配组件

如果指定装配的具体的哪一个组件的话,那么装配方式就是byName,如果不指定具体的装配的话,那么先按照属性的名称来装配,如果装配名称没有找到,将退回到byType的方式来进行装配

@PostConstruct容器创建对象时执行的方法

@PreDestory容器销毁对象时执行的方法

@Scope作用域(value=”  ”)

2.Aop面向切面编程

1.JDKProxy

public static Object getProxyObject(finalObject c){
         returnProxy.newProxyInstance(c.getClass().getClassLoader(), c.getClass().getInterfaces(),
                            newInvocationHandler() {
                                     @Override
                                     publicObject invoke(Object proxy, Method method, Object[] args)
                                                        throwsThrowable {
                                               //TODO Auto-generated method stub
                                               returnmethod.invoke(c, args);
                                     }
                            });
         }

2.使用@Aspect将该JAVA类标记为一个切面,一个切面对应着一个交叉业务

3.@Before前置通知执行在目标方法执行之前(aspectj包)(value=“exeaction(public *(*代表返回类型)com.lovo.service.*.*(..))”)

该通知可以做一些目标方法执行之前的初识设置

User*表示以user开头的

*service表示以service结尾的

..表示多参数

JoinPoint连接点(jp)

4.配置文件中加<aop:aspectj-autoproxy></aop:aspectj-autoproxy >

Object obj = jp.getTarget()目标对象获取

Jp.getSignature().getName()目标方法名字获取

Jp.getArgs()返回数组,目标方法参数

Class c = obj.getClass()得到对象所对应的类

Method m = c.getMethod(“setName”,String.class)

m.invoke(obj,”xiaoming”)

5.@AfterReturning后置返回通知,参数(JoinPointjp,Object ret返回对象)

执行在目标方法正常完成之后

(returning = “ret”,pointcut=“ex….同上”)

6.@AfterThrowing(throwing=”tx”,pointcut=“ex….同上”),参数(jp,Throwable tx)后置异常通知,执行在目标方法抛出异常之后,不会与@AfterReturning同时出现

7.@After(“同上”)后置通知,无论目标方法是否抛出异常都会执行在以上两个@after前面

8.@Around(“同上”)环绕通知,可以修改对象,能用before+after解决的,就不要用这个方法,这是唯一一个可以修改方法和参数返回的通知标签