Эта статья демонстрирует реализацию AOP с использованием аннотации AspectJ и конфигурации XML в пружине
Ниже приведен проект Java, который реализует AOP с использованием аннотаций AspectJ
Сначала - файл ApplicationContext.xml, расположенный под классом.
<? 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: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframework.org/schema/tx" xsi: schemalocation = "http://wwww.springform. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "> <!-Включите поддержку Annotation-> <aop: Asciesj-autoproxy/> <Bean Id Id. id = "SecurityHandler"/> </beans>
Тогда есть интерфейс сервисного уровня и класс реализации
пакет com.jadyer.annotation; Public Interface UserManager {public void AddUser (String UserName, String Password); public void deluser (int userid); public String finduserbyId (int userId); public void modifyUser (int userId, string username, String Password); } / *** Приведенный выше пользовательский менеджер - это интерфейс сервисного уровня* Следующим пользовательским ManAgerimpl является класс реализации интерфейса уровня службы* / package com.jadyer.annotation; открытый класс UserManagerImpl реализует пользовательский Mananager {public void Adduser (String username, String Password) {System.out.println ("------- userManagerImpl.Adduser () вызывается -----"); } public void deluser (int userId) {System.out.println ("-------- userManagerImpl.deluser () вызывается ------"); } public String findUserById (int userId) {System.out.println ("------ userManagerImpl.finduserById () вызывается ------"); вернуть "Жизнь с железным лицом"; } public void modifyUser (int userId, string username, string password) {System.out.println ("------- userManagerImpl.modifyUser () вызывается ------"); }} Далее следует входной класс, отмеченный аспектом
пакет com.jadyer.annotation; Импорт org.aspectj.lang.annotation.after; Импорт org.aspectj.lang.annotation.aspept; Импорт org.aspectj.lang.annotation.pointcut; @Aspect public Class SecurityHandler { /** * определить PointCut * @see pointcut Имя Pointcut IS addaddmethod (). Этот метод не имеет возвращаемого значения и параметров* @see Этот метод является идентификатором и не называет его*/@pointcut ("excution (* add* (..))") // Сопоставление всех методов, начиная с добавления private void addadddmethod () {}; /*** Определите советы* @see Указывает, к каким подпискам Pointcut наш совет применяется на in joinpoints*/// @до ("addadddmethod ()") @after ("addadddmethod ()") private void-ecectecurity () {System.out.println ("------ 【checsecurity wepsecurity 】-); }} Наконец, класс тестирования клиента
пакет com.jadyer.annotation; Импорт org.springframework.context.applicationContext; Import org.springframework.context.support.classpathxmlapplicationContext; /*** Поддержка весны AOP: принимает метод аннотации* @see --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Обязательное условие: Поскольку это динамический прокси JDK, если вы хотите генерировать прокси, класс должен реализовать интерфейс* @see, если класс не имеет интерфейса реализации и по-прежнему использует реализацию AOP Spring по умолчанию. То есть развивать привычку ориентированного на интерфейс программирования* @see ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Добавлена поддержка аннотации * @see * spring_home // dist // spring.jar * @see * spring_home // lib // log4j // log4j-1.2.14.jar * @see * spring_home // lib // jakarta-commons // commons-logging.jar * @see * spring_home // lib // aspectJ-j.sherize * @se @se @se @se @se @se @se @se @se @se @se @se @se @se @see @see 2. Отношения и установить SecurityHandler.java * @see 3. Используйте аннотации, чтобы указать SecurityHandler как аспект * @see 4. Используйте аннотации, чтобы определить консультации и pointcut * @see 5. Включите поддержку AspectJ для аннотации и настройте целевой класс и класс аспекта в контейнер IOC * @see 6. Development * @seee --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (UserManager) factory.getBean ("UserManager"); UserManager.Adduser ("Zhang Qiling", "02200059"); }} Ниже приведен проект Java, который реализует AOP с использованием файлов конфигурации XML
Во-первых, файл ApplicationContext-clib.xml, расположенный в корневом каталоге SRC
<? 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: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframework.org/schema/tx" xsi: schemalocation = "http://wwww.springform. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "> <!-Force Cglib Proxy-> <!-<aop: acpectJ-autoproxy proxy-kly- id="userManager"/> <bean id="securityHandler"/> <aop:config> <aop:aspect id="securityAspect" ref="securityHandler"> <aop:pointcut id="addAddMethod" expression="execution(* add*(..))"/> <aop:before method="checkSecurity" pointcut-ref="addAddMethod"/> </aop:aspect> </aop: config> </beans> <!- Сопоставьте все методы, начиная с Add (*add*(..)) Сопоставьте все методы всех классов в соответствии с com.jadyer.servcices.impl Package выполнение (*com.jadyer.servcices.impl.*. com.jadyer.services.impl.*. добавить*(..)) || выполнение (*com.jadyer.services.impl.*. del*(..)) ->
Тогда есть интерфейс сервисного уровня и класс реализации
пакет com.jadyer.cglib; Public Interface UserManager {public void AddUser (String UserName, String Password); public void deluser (int userid); public String finduserbyId (int userId); public void modifyUser (int userId, string username, String Password); } / *** Приведенный выше пользовательский менеджер - это интерфейс уровня службы* Следующим пользовательским manAgerimpl является класс реализации интерфейса уровня службы* / package com.jadyer.cglib; открытый класс UserManagerImpl {// реализует пользовательский ManAnager {public void AddUser (String username, String Password) {System.out.println ("------- userManagerImpl.Adduser () вызывается -----"); } public void deluser (int userId) {System.out.println ("-------- userManagerImpl.deluser () вызывается -----"); } public String findUserById (int userId) {System.out.println ("------ userManagerImpl.finduserByid () вызывается -----"); вернуть "Чжан Сан"; } public void modifyUser (int userId, string username, string password) {system.out.println ("------- userManagerImpl.modifyUser () вызывается -----"); }} Далее следует класс записи, указанный в ApplicationContext-clib.xml
пакет com.jadyer.cglib; Импорт org.aspectj.lang.joinpoint; /*** Передайте информацию о вызова клиента в советы* @See Вы можете добавить параметр JoinPoint в советы, чтобы получить имя метода и значение параметра клиента Call* @See В будущем, существует меньше случаев использования AOP для написания подобных вещей. В основном мы используем транзакции, предоставленные Spring* @see, вы можете знать об этом. Ниже приведен пример кода */ public Class SecurityHandler {private void CheckSecurity (joinpoint joinpoint) {for (int i = 0; i <joinpoint.getargs (). Length; i ++) {System.out.println (joinpoint.getargs () [i]); // Получить значение параметра метода, вызванного клиентом} System.out.println (joinpoint.getSignature (). GetName ()); // Получить имя метода, вызванное клиентской системой. }} Наконец, класс тестирования клиента
пакет com.jadyer.cglib; Импорт org.springframework.context.applicationContext; Import org.springframework.context.support.classpathxmlapplicationContext; /** * @видеть ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Since it is Наследование, лучше не использовать окончательное объявление для целевого класса* @see ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Потому что целевыми показателями, которые мы доверенные, как правило, являются бизнес -объектами* @see --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Public Class Client {public static void main (string [] args) {ApplicationContext factory = new ClassPathxMlApplicationContext ("ApplicationContext-clib.xml"); // Когда UserManagerImpl реализует интерфейс пользовательского управляющего, Spring автоматически использует Dynamic Proxy JDK // Если в проекте представил библиотеку CGLIB и заставит использование прокси CGLIB в файле конфигурации, Spring будет использовать только CGLIB Proxy // UserManager Usermanager = (Usermanager) Factory.getbean ("UserManager"); // Поскольку в настоящее время интерфейс UserManagerImpl не реализует интерфейс пользовательского управляющего, интерфейс UserManager не может быть использован в типе приемного типа .// Места библиотеки CGLIB была введена в проекте. Хотя прокси CGLIB не вынужден использоваться в файле конфигурации, Spring автоматически использует CGLIB Proxy UserManagerImpl UserManager = (userManagerImpl) factory.getBean ("UserManager"); UserManager.Adduser ("wu sansheng", "02200059"); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.