{"id":21974165,"url":"https://github.com/javaobjects/day04_springaop01","last_synced_at":"2026-04-24T23:33:12.076Z","repository":{"id":105562182,"uuid":"214963476","full_name":"javaobjects/day04_springAOP01","owner":"javaobjects","description":"注解配置","archived":false,"fork":false,"pushed_at":"2019-10-15T01:25:18.000Z","size":5709,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-22T23:27:48.307Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javaobjects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-14T06:20:52.000Z","updated_at":"2019-10-15T01:25:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"f84121d6-1df1-428f-8b67-7fb6d50014b6","html_url":"https://github.com/javaobjects/day04_springAOP01","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fday04_springAOP01","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fday04_springAOP01/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fday04_springAOP01/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fday04_springAOP01/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javaobjects","download_url":"https://codeload.github.com/javaobjects/day04_springAOP01/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fday04_springAOP01/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259280322,"owners_count":22833424,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-29T15:39:14.522Z","updated_at":"2026-04-24T23:33:12.027Z","avatar_url":"https://github.com/javaobjects.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AOP注解配置\n\n### 前置通知\n\n#### 1.导入对应的jar包 并添加到内路径\n\n![](Images/1.png)\n\n#### 2. aop包内的Java代码准备就位\n\n```Java\npackage aop;\n\n\npublic class DeptDaoImpl implements IDeptDao {\n\n\tpublic DeptDaoImpl()\n\t{\n\t\tSystem.out.println(\"new DeptDaoImpl() 实例化\");\n\t}\n\t\n\t@Override\n\tpublic void selectDept() {\n\t\t//System.out.println(\"DeptDaoImpl.selectDept()............日志记录开始\");\n\t\t\n\t\tSystem.out.println(\"DeptDaoImpl.selectDept..........软件开发事业部11111\");\n\t\t\n\t\t//System.out.println(\"DeptDaoImpl.selectDept()............日志记录结束\");\n\t}\n\n\t@Override\n\tpublic boolean insertDept(String deptname) {\n\t\t//System.out.println(\"DeptDaoImpl.insertDept(\"+deptname+\")............日志记录开始\");\n\t\t\n\t\tSystem.out.println(\"DeptDaoImpl.insertDept(\"+deptname+\")\");\n\t\t\n\t\t//System.out.println(\"DeptDaoImpl.insertDept()............日志记录开始,返回结果：\" + true);\n\t\t\n\t\treturn true;\n\t}\n}\n```\n\n```Java\npackage aop;\n\n\npublic interface IDeptDao {\n\n\tpublic void selectDept();\n\t\n\tpublic boolean insertDept(String deptname);\n}\n\n```\n\n```Java\npackage aop;\n\n\npublic interface IUserDao {\n\n\tpublic void selectUser();\n\t\n\tpublic boolean insertUser(String username);\n}\n\n```\n\n```Java\npackage aop;\n\n\npublic class UserDaoImpl_2 implements IUserDao {\n\n\tpublic UserDaoImpl_2()\n\t{\n\t\tSystem.out.println(\"new UserDaoImpl_2() 实例化\");\n\t}\n\t\n\t@Override\n\tpublic void selectUser() {\n\t\t//System.out.println(\"UserDaoImpl_2.selectUser()............日志记录开始\");\n\t\t\n\t\tSystem.out.println(\"UserDaoImpl_2.selectUser..........玉艺22222\");\n\t\t\n\t\t//System.out.println(\"UserDaoImpl_2.selectUser()............日志记录结束\");\n\t}\n\n\t@Override\n\tpublic boolean insertUser(String username) {\n\t\t//System.out.println(\"UserDaoImpl_2.insertUser(\"+username+\")............日志记录开始\");\n\t\t\n\t\tSystem.out.println(\"UserDaoImpl_2.insertUser(\"+username+\")\");\n\t\t\n\t\t//System.out.println(\"UserDaoImpl_2.insertUser()............日志记录开始,返回结果：\" + true);\n\t\t\n\t\treturn true;\n\t}\n}\n\n```\n\n```Java\npackage aop;\n\n\npublic class UserDaoImpl implements IUserDao {\n\n\tpublic UserDaoImpl()\n\t{\n\t\tSystem.out.println(\"new UserDaoImpl() 实例化\");\n\t}\n\t\n\t@Override\n\tpublic void selectUser() {\n\t\t//System.out.println(\"UserDaoImpl.selectUser()............日志记录开始\");\n\t\t\n\t\tSystem.out.println(\"UserDaoImpl.selectUser..........杰成11111\");\n\t\t\n\t\t//System.out.println(\"UserDaoImpl.selectUser()............日志记录结束\");\n\t}\n\n\t@Override\n\tpublic boolean insertUser(String username) {\n\t\t//System.out.println(\"UserDaoImpl.insertUser(\"+username+\")............日志记录开始\");\n\t\t\n\t\tSystem.out.println(\"UserDaoImpl.insertUser(\"+username+\")\");\n\t\t\n\t\t//System.out.println(\"UserDaoImpl.insertUser()............日志记录开始,返回结果：\" + true);\n\t\t\n\t\treturn true;\n\t}\n}\n\n```\n\n#### applicationContext.xml配置\n\n![](Images/3.png)\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cbeans xmlns=\"http://www.springframework.org/schema/beans\"\n\t   xmlns:context=\"http://www.springframework.org/schema/context\"\n\t   xmlns:aop=\"http://www.springframework.org/schema/aop\"\n\t   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\t   xsi:schemaLocation=\"http://www.springframework.org/schema/beans \n\t                       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\n\t                       http://www.springframework.org/schema/context\n\t                       http://www.springframework.org/schema/context/spring-context-4.1.xsd\n\t                       http://www.springframework.org/schema/aop\n\t                       http://www.springframework.org/schema/aop/spring-aop-4.1.xsd\"\u003e\n\n\t\u003cbean id=\"userDao\" class=\"aop.UserDaoImpl\"\u003e\u003c/bean\u003e\n\t\u003cbean id=\"userDao2\" class=\"aop.UserDaoImpl_2\"\u003e\u003c/bean\u003e\n\t\u003cbean id=\"deptDao\" class=\"aop.DeptDaoImpl\"\u003e\u003c/bean\u003e\n\t\n\t\u003cbean id=\"advice\" class=\"aop.advice.LogAdvice\"\u003e\u003c/bean\u003e\n\t\n\t\u003c!-- 开启aop注解功能:生成自动代理 --\u003e\n\t\u003caop:aspectj-autoproxy/\u003e\n\t\n\u003c/beans\u003e\n```\n\n#### 书写注解配置代码以及测试代码\n\n![](Images/2.png)\n\n```Java\npackage aop.advice;\n\nimport org.aspectj.lang.annotation.Before;\nimport org.aspectj.lang.annotation.Pointcut;\n\n/**\n * \n* \u003cp\u003eTitle: LogAdvice\u003c/p\u003e  \n* \u003cp\u003e\n*\tDescription: \n*   切面(ascpet) = 切入点(pointCut) + 通知(advice)\n*   \n*   切入点(@Pointcut):修饰的方法不需要返回值，不需要参数，仅作为一个切入点的标记\n*   \n*   通知(advice)\n*   \t前置通知:@Before,在调用方法之前执行的代码\n* \u003c/p\u003e \n* @author xianxian \n* @date 2019年10月14日\n */\n@Aspect\npublic class LogAdvice {\n\n\t@Pointcut(\"execution(* aop.*.select*(..)) || execution(* aop.*.insert*(..))\")\n\tpublic void method() {}\n\t\n\t@Before(\"method()\")//在调用方法之前执行代码\n\tpublic void logBefore() {\n\t\tSystem.out.println(\"日志记录............................前置通知【调用方法之前执行的代码】，例如:权限控制................\");\n\t}\n}\n\n```\n\n```Java\npackage aop;\n\n\nimport org.springframework.context.support.ClassPathXmlApplicationContext;\n\npublic class Test {\n\n\tpublic static void main(String[] args){\n\n\t\t//1.加载并且解析applicationContext.xml\n\t\t//积极加载，在加载与解析xml的同时，即完成所有bean的实例化\n\t\tClassPathXmlApplicationContext factory = new ClassPathXmlApplicationContext(\"applicationContext.xml\");\n\t\t\n\t\tSystem.out.println(\"----------IOC容器加载完成--------------------\");\n\t\t\n\t\t//2.无代理，无日志记录\n\t\tIUserDao userDao = (IUserDao) factory.getBean(\"userDao\");\n\t\tIUserDao userDao2 = (IUserDao) factory.getBean(\"userDao2\");\n\t\tIDeptDao deptDao = (IDeptDao) factory.getBean(\"deptDao\");\n\t\t\n\t\tuserDao.selectUser();\n\t\tuserDao2.selectUser();\n\t\tdeptDao.selectDept();;\n\t\t\n\t\tdeptDao.insertDept(\"软件事业部\");\n\t}\n\n}\n\n```\n\n#### 运行测试\n\n![](Images/5.png)\n\n\n###  后置通知\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavaobjects%2Fday04_springaop01","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavaobjects%2Fday04_springaop01","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavaobjects%2Fday04_springaop01/lists"}