Spring學習之路(三)bean註解管理AOP操作
阿新 • • 發佈:2017-09-01
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操作