diff --git a/docs/mysql.sql b/docs/mysql.sql new file mode 100644 index 0000000000000000000000000000000000000000..47d49da1757e7e3d921c1928368b2a3af7a81bdb --- /dev/null +++ b/docs/mysql.sql @@ -0,0 +1,7 @@ +CREATE TABLE `t_book` +( + `userId` VARCHAR(32) DEFAULT NULL COMMENT '用户id', + `username` VARCHAR(32) DEFAULT NULL COMMENT '名字', + `ustatus` VARCHAR(32) DEFAULT NULL COMMENT '状态' +) ENGINE = InnoDB + DEFAULT CHARSET = utf8; \ No newline at end of file diff --git a/pom.xml b/pom.xml index 916206a55a320a8f777b2a0e76e12a91d54f070a..f1f6651c1a6babbae3ad790b14ac1d28a99a1d7b 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,22 @@ druid 1.2.3 + + org.aspectj + aspectjrt + 1.9.7 + + + org.springframework + spring-jdbc + 5.3.8 + test + + + org.springframework + spring-jdbc + 5.3.8 + compile + - \ No newline at end of file diff --git a/src/main/java/com/kwan/spring5/Book.java b/src/main/java/com/kwan/spring5/Book.java index 8533a5f3fad9c2779b6f5c0b82758ab41fba4b0c..aaebc6620bd54db5c1955965c313a88874998a6b 100644 --- a/src/main/java/com/kwan/spring5/Book.java +++ b/src/main/java/com/kwan/spring5/Book.java @@ -10,6 +10,19 @@ import java.util.List; * @date : 2022/11/12 19:22 */ public class Book { + + /** + * 用户id + */ + private String userId; + /** + * 用户名 + */ + private String username; + /** + * 状态 + */ + private String ustatus; /** * 名称 */ @@ -38,6 +51,42 @@ public class Book { this.list = list; } + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getUstatus() { + return ustatus; + } + + public void setUstatus(String ustatus) { + this.ustatus = ustatus; + } + + public String getBname() { + return bname; + } + + public String getBauthor() { + return bauthor; + } + + public List getList() { + return list; + } + @Override public String toString() { return "Book{" + @@ -46,4 +95,12 @@ public class Book { ", list=" + list + '}'; } + + + /** + * 购买方法 + */ + public void buy() { + System.out.println("购买书籍....."); + } } diff --git a/src/main/java/com/kwan/spring5/User.java b/src/main/java/com/kwan/spring5/User.java index 19612b281cb68f7cebb89fa27f0070e7d295cfa0..031decb885350b40b84c9efa69e076cd7e650757 100644 --- a/src/main/java/com/kwan/spring5/User.java +++ b/src/main/java/com/kwan/spring5/User.java @@ -1,5 +1,7 @@ package com.kwan.spring5; +import org.springframework.stereotype.Component; + /** * 用户 * @@ -7,6 +9,7 @@ package com.kwan.spring5; * @version : 2.2.0 * @date : 2022/11/12 19:22 */ +@Component(value = "user") public class User { /** @@ -16,6 +19,10 @@ public class User { System.out.println("访问user成功"); } + public void add() { + System.out.println("访问user成功"); + } + @Override public String toString() { return "User{}"; diff --git a/src/main/java/com/kwan/spring5/dao/BookDao.java b/src/main/java/com/kwan/spring5/dao/BookDao.java new file mode 100644 index 0000000000000000000000000000000000000000..18364c0ace2a1501f7bbe19ddfcf53682b7469ce --- /dev/null +++ b/src/main/java/com/kwan/spring5/dao/BookDao.java @@ -0,0 +1,7 @@ +package com.kwan.spring5.dao; + +import com.kwan.spring5.Book; + +public interface BookDao { + void add(Book book); +} diff --git a/src/main/java/com/kwan/spring5/dao/UserDao.java b/src/main/java/com/kwan/spring5/dao/UserDao.java index f80f9e59ddfc93602525feb444e16ea6905c9e2a..d5360b02e8dd2ec5c48933a5f044e898909cd856 100644 --- a/src/main/java/com/kwan/spring5/dao/UserDao.java +++ b/src/main/java/com/kwan/spring5/dao/UserDao.java @@ -13,4 +13,17 @@ public interface UserDao { * 更新 */ void update(); + + /** + * 新增 + * @param a + * @param b + * @return + */ + public int add(int a,int b); + + /** + * 更新 + */ + public String update(String id); } diff --git a/src/main/java/com/kwan/spring5/dao/impl/BookDaoImpl.java b/src/main/java/com/kwan/spring5/dao/impl/BookDaoImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..0c7c58ec6ed669d17129039b38016f2e3ad5f638 --- /dev/null +++ b/src/main/java/com/kwan/spring5/dao/impl/BookDaoImpl.java @@ -0,0 +1,31 @@ +package com.kwan.spring5.dao.impl; + +import com.kwan.spring5.Book; +import com.kwan.spring5.dao.BookDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +@Repository +public class BookDaoImpl implements BookDao { + /** + * 注入 JdbcTemplate + */ + @Autowired + private JdbcTemplate jdbcTemplate; + + /** + * 添加的方法 + * + * @param book + */ + @Override + public void add(Book book) { + //1 创建 sql 语句 + String sql = "INSERT INTO t_book VALUES(?,?,?)"; + //2 调用方法实现 + Object[] args = {book.getUserId(), book.getUsername(), book.getUstatus()}; + int update = jdbcTemplate.update(sql, args); + System.out.println(update); + } +} \ No newline at end of file diff --git a/src/main/java/com/kwan/spring5/dao/impl/UserDaoImpl.java b/src/main/java/com/kwan/spring5/dao/impl/UserDaoImpl.java index 277ce2ebdaec8dfc87d0591076be3763a183c217..aa8ebce507cfa764fba4bb99df60bca979711872 100644 --- a/src/main/java/com/kwan/spring5/dao/impl/UserDaoImpl.java +++ b/src/main/java/com/kwan/spring5/dao/impl/UserDaoImpl.java @@ -12,8 +12,19 @@ import org.springframework.stereotype.Repository; */ @Repository(value = "userDaoImpl") public class UserDaoImpl implements UserDao { + @Override public void update() { System.out.println("dao update..........."); } + + @Override + public int add(int a, int b) { + return a + b; + } + + @Override + public String update(String id) { + return id; + } } diff --git a/src/main/java/com/kwan/spring5/proxy/BookProxy.java b/src/main/java/com/kwan/spring5/proxy/BookProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..2bfa4b3d0ed41bcd4838a689765a7636294e5267 --- /dev/null +++ b/src/main/java/com/kwan/spring5/proxy/BookProxy.java @@ -0,0 +1,8 @@ +package com.kwan.spring5.proxy; + +public class BookProxy { + + public void before() { + + } +} diff --git a/src/main/java/com/kwan/spring5/proxy/PersonProxy.java b/src/main/java/com/kwan/spring5/proxy/PersonProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..934ed48dcf37fab5f671a893c0b301cd9cd527ee --- /dev/null +++ b/src/main/java/com/kwan/spring5/proxy/PersonProxy.java @@ -0,0 +1,59 @@ +package com.kwan.spring5.proxy; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.*; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * 在增强类上面添加注解 @Order(数字类型值),数字类型值越小优先级越高 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2022/11/15 17:40 + */ +@Component +@Aspect +@Order(1) +public class PersonProxy { + /** + * 相同切入点抽取 + */ + @Pointcut(value = "execution(* com.kwan.spring5.User.add(..))") + public void pointdemo() { + } + + //前置通知 + //@Before注解表示作为前置通知 + @Before(value = "pointdemo()")//相同切入点抽取使用! + public void before() { + System.out.println("before........."); + } + + //后置通知(返回通知) + @AfterReturning(value = "execution(* com.kwan.spring5.User.add(..))") + public void afterReturning() { + System.out.println("afterReturning........."); + } + + //最终通知 + @After(value = "execution(* com.kwan.spring5.User.add(..))") + public void after() { + System.out.println("after........."); + } + + //异常通知 + @AfterThrowing(value = "execution(* com.kwan.spring5.User.add(..))") + public void afterThrowing() { + System.out.println("afterThrowing........."); + } + + //环绕通知 + @Around(value = "execution(* com.kwan.spring5.User.add(..))") + public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { + System.out.println("环绕之前........."); + //被增强的方法执行 + proceedingJoinPoint.proceed(); + System.out.println("环绕之后........."); + } +} \ No newline at end of file diff --git a/src/main/java/com/kwan/spring5/proxy/UserDaoProxy.java b/src/main/java/com/kwan/spring5/proxy/UserDaoProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..75483a7e79d64b6b862314a054e54e68f682a26a --- /dev/null +++ b/src/main/java/com/kwan/spring5/proxy/UserDaoProxy.java @@ -0,0 +1,46 @@ +package com.kwan.spring5.proxy; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.util.Arrays; + +/** + * 创建代理对象代码 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2022/11/15 17:04 + */ +public class UserDaoProxy implements InvocationHandler { + + + /** + * 把创建的是谁的代理对象,把谁传递过来 + * 有参数构造传递 + */ + private Object obj; + + public UserDaoProxy(Object obj) { + this.obj = obj; + } + + /** + * 增强的逻辑 + * + * @param proxy + * @param method + * @param args + * @return + * @throws Throwable + */ + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + //方法之前 + System.out.println("方法之前执行...." + method.getName() + " :传递的参数..." + Arrays.toString(args)); + //被增强的方法执行 + Object res = method.invoke(obj, args); + //方法之后 + System.out.println("方法之后执行...." + obj); + return res; + } +} \ No newline at end of file diff --git a/src/main/java/com/kwan/spring5/proxy/UserProxy.java b/src/main/java/com/kwan/spring5/proxy/UserProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..e766c749770907d7223b8357ef6c09b874e66dab --- /dev/null +++ b/src/main/java/com/kwan/spring5/proxy/UserProxy.java @@ -0,0 +1,52 @@ +package com.kwan.spring5.proxy; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.*; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +@Component +@Aspect +@Order(2) +public class UserProxy { + /** + * 相同切入点抽取 + */ + @Pointcut(value = "execution(* com.kwan.spring5.User.add(..))") + public void pointdemo() { + } + + //前置通知 + //@Before注解表示作为前置通知 + @Before(value = "pointdemo()")//相同切入点抽取使用! + public void before() { + System.out.println("before........."); + } + + //后置通知(返回通知) + @AfterReturning(value = "execution(* com.kwan.spring5.User.add(..))") + public void afterReturning() { + System.out.println("afterReturning........."); + } + + //最终通知 + @After(value = "execution(* com.kwan.spring5.User.add(..))") + public void after() { + System.out.println("after........."); + } + + //异常通知 + @AfterThrowing(value = "execution(* com.kwan.spring5.User.add(..))") + public void afterThrowing() { + System.out.println("afterThrowing........."); + } + + //环绕通知 + @Around(value = "execution(* com.kwan.spring5.User.add(..))") + public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { + System.out.println("环绕之前........."); + //被增强的方法执行 + proceedingJoinPoint.proceed(); + System.out.println("环绕之后........."); + } +} \ No newline at end of file diff --git a/src/main/java/com/kwan/spring5/service/BookService.java b/src/main/java/com/kwan/spring5/service/BookService.java new file mode 100644 index 0000000000000000000000000000000000000000..97e14aaa20b5bdcea1a6a216b2263c431c29ec3a --- /dev/null +++ b/src/main/java/com/kwan/spring5/service/BookService.java @@ -0,0 +1,25 @@ +package com.kwan.spring5.service; + +import com.kwan.spring5.Book; +import com.kwan.spring5.dao.BookDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class BookService { + /** + * 注入 dao + */ + @Autowired + private BookDao bookDao; + + + /** + * 添加书籍 + * + * @param book + */ + public void add(Book book) { + bookDao.add(book); + } +} diff --git a/src/main/resources/spring23.xml b/src/main/resources/spring23.xml new file mode 100644 index 0000000000000000000000000000000000000000..e2b5ec922c98f0119d222f74170e67c3c91540b0 --- /dev/null +++ b/src/main/resources/spring23.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/spring24.xml b/src/main/resources/spring24.xml new file mode 100644 index 0000000000000000000000000000000000000000..38029b2c65a0dc35d4661c66ebf8a772ae48f583 --- /dev/null +++ b/src/main/resources/spring24.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/spring25.xml b/src/main/resources/spring25.xml new file mode 100644 index 0000000000000000000000000000000000000000..de402bd243e0aa0cb0165d367f6733f3b69de7b0 --- /dev/null +++ b/src/main/resources/spring25.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/Spring_22_JDKProxy.java b/src/test/java/Spring_22_JDKProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..ae4df02925a4009ee3924525b5b4d7f40fa58647 --- /dev/null +++ b/src/test/java/Spring_22_JDKProxy.java @@ -0,0 +1,31 @@ +import com.kwan.spring5.dao.UserDao; +import com.kwan.spring5.dao.impl.UserDaoImpl; +import com.kwan.spring5.proxy.UserDaoProxy; +import org.junit.Test; + +import java.lang.reflect.Proxy; + +/** + * jdk动态代理 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2022/11/12 18:43 + */ +public class Spring_22_JDKProxy { + + @Test + public void test1() { + //创建接口实现类代理对象 + Class[] interfaces = {UserDao.class}; + UserDaoImpl userDao = new UserDaoImpl(); + /** 第一参数,类加载器 + 第二参数,增强方法所在的类,这个类实现的接口,(支持多个接口) + 第三参数,实现这个接口 InvocationHandler,创建代理对象,写增强的部分 */ + UserDao dao = (UserDao) Proxy.newProxyInstance(Spring_22_JDKProxy.class.getClassLoader(), interfaces, + new UserDaoProxy(userDao)); + int result = dao.add(1, 2); + System.out.println("result:" + result); + } + +} diff --git a/src/test/java/Spring_23_.java b/src/test/java/Spring_23_.java new file mode 100644 index 0000000000000000000000000000000000000000..ced4e2c681d7b4e9a9666adaf9a314c8fd351c6c --- /dev/null +++ b/src/test/java/Spring_23_.java @@ -0,0 +1,24 @@ +import com.kwan.spring5.User; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * jdk动态代理 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2022/11/12 18:43 + */ +public class Spring_23_ { + + @Test + public void test1() { + ApplicationContext ctx = + new ClassPathXmlApplicationContext("spring23.xml"); + User user = ctx.getBean("user",User.class); + user.add(); + System.out.println(user); + } + +} diff --git a/src/test/java/Spring_24_.java b/src/test/java/Spring_24_.java new file mode 100644 index 0000000000000000000000000000000000000000..359297f0bcd5c4a787e8226717389ac91e8c1ec1 --- /dev/null +++ b/src/test/java/Spring_24_.java @@ -0,0 +1,24 @@ +import com.kwan.spring5.User; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * jdk动态代理 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2022/11/12 18:43 + */ +public class Spring_24_ { + + @Test + public void test1() { + ApplicationContext ctx = + new ClassPathXmlApplicationContext("spring23.xml"); + User user = (User) ctx.getBean("user"); + user.add(); + System.out.println(user); + } + +} diff --git a/src/test/java/Spring_25_add.java b/src/test/java/Spring_25_add.java new file mode 100644 index 0000000000000000000000000000000000000000..b7fc628d7c05de2a1061cbfe0ec118ec870da56c --- /dev/null +++ b/src/test/java/Spring_25_add.java @@ -0,0 +1,28 @@ + +import com.kwan.spring5.Book; +import com.kwan.spring5.service.BookService; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * jdbc添加数据 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2022/11/12 18:43 + */ +public class Spring_25_add { + + @Test + public void test1() { + ApplicationContext ctx = new ClassPathXmlApplicationContext("spring25.xml"); + BookService bookService = ctx.getBean("bookService", BookService.class); + Book book = new Book(); + book.setUserId("1"); + book.setUsername("1"); + book.setUstatus("1"); + bookService.add(book); + } + +}