1. 程式人生 > >Spring學習之路(三)bean註解管理AOP操作

Spring學習之路(三)bean註解管理AOP操作

spec resource 自定義屬性 開始 java framework XML 方法名 jar包

在類上面、方法上面、屬性上面添加註解;並用bean來管理;

書寫方法:@註解名稱(屬性名稱=值)

第一步:導入jar包

  導入spring-aop.jar(spring註解包);

第二步:創建實體類(註解對象)

package com.aop;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 * value的值是自定義屬性值
 * @Component(value="user")    
 * @Controller    web層
 * @Service        業務層
 * @Repository    持久層
 * 
 * (value="xx" 相當於      <bean id="xx" class="路徑"></bean>
 * 四種註解方式,功能都相同
 
*/ @Component(value="user") @Scope(value="prototype") //創建是多例還是單例 public class AopUser { public void add() { System.out.println("add---------------"); } }

第三步:配置註解文件,引入約束

  核心約束:spring-beans.xsd

  註解約束:spring-context.xsd

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
> <!-- 開啟註解掃描 --> <!-- base-package :掃描到包裏邊的所有是否存在註解 --> <context:component-scan base-package="com.aop"></context:component-scan> <!-- <context:annotation-config></context:annotation-config> 掃描屬性上的註解 --> </beans>

第四步:測試

    @Test
    public void test() {
        //加載 spring 配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//        得到註解對象 value的值
        AopUser user =  (AopUser) context.getBean("user");
        user.add();
    }

多例練習

package com.ioc;

import javax.annotation.Resource;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Service(value="user")
public class User {
    //@Autowired    兩種方法都可以
    @Resource(name="userDao")//獲取userDao註解名稱
    private UserDao userDao;
    //得到dao對象,在使用註解方式時不需要set方法
    public void add() {
        System.out.println("user=====--------");
        userDao.add();
    }
}
//userDao類

@Component(value="userDao")
public class UserDao {
    public void add() {
        System.out.println("dao---------------");
    }
}

//測試;配置文件同上
@Test
public void test() {
    //加載 spring 配置文件
    ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//    得到註解對象 value的值
    User user =  (User) context.getBean("user");
    user.add();
}

AOP操作

  1、導入jar包(看spring入門)

  2、創建實體類

package com.ioc;

import javax.annotation.Resource;


public class User {
    public void add() {
        System.out.println("user=====--------");
    }
}

// userDao類

import org.aspectj.lang.ProceedingJoinPoint;

public class UserDao {
    public void add() {
        System.out.println("前置增強---------------");
    }
    public void after(){
        System.out.println("後置增強------------");
    }
    
//    環繞通知
    public void arount(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
//        方法之前
        System.out.println("方法之前執行----------------");
//        執行增強的方法
        proceedingJoinPoint.proceed();
//        方法之後
        System.out.println("方法後執行----------------");
    }
}

  3、配置bean文件(導入aop約束)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop 
         http://www.springframework.org/schema/aop/spring-aop.xsd">  

         <!-- 配置對象 -->
         <bean id="user" class="com.ioc.User"></bean>
         <bean id="userDao" class="com.ioc.UserDao"></bean>
         <!-- 配置aop操作 -->
         <aop:config>
             <!-- 配置切入點 -->
              <!-- execution(<訪問修飾符>?<返回類型><方法名>(<參數>)<異常>) -->
             <aop:pointcut expression="execution(* com.ioc.User.*(..))" id="pointcut1"/>
             <!-- 配置切面 ;把增強放到方法上面-->
             <aop:aspect ref="userDao">
                 <!-- 配置增強類型;
                     method:設置 userdao中的增強的方法名
                     pointcut-ref:指向切入點ID值
                     就是先執行userDao裏的方法,再執行user裏的方法
                  -->
                 <aop:before method="add" pointcut-ref="pointcut1"/>
                 <!-- 後置增強 執行user的方法之後才會執行 after方法 -->
                 <aop:after-returning method="after" pointcut-ref="pointcut1"/>
                 <!-- 在執行user方法的前後開始執行其中的方法 -->
                 <aop:around method="arount" pointcut-ref="pointcut1"/>
             </aop:aspect>
         </aop:config>
</beans>

  4、測試

package com.junit;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ioc.User;



public class Text {

    @Test
    public void test() {
        //加載 spring 配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//        得到註解對象 value的值
        User user =  (User) context.getBean("user");
        user.add();
    }

}

Spring學習之路(三)bean註解管理AOP操作