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);
+ }
+
+}