瀏覽代碼

0115 spring aop+jdbc

Qing 1 年之前
父節點
當前提交
0a62b30698
共有 99 個文件被更改,包括 659 次插入185 次删除
  1. 65 3
      spring-demo/pom.xml
  2. 1 1
      spring-demo/src/main/java/com/sf/aop/advisor/MyClassFilter.java
  3. 12 0
      spring-demo/src/main/java/com/sf/aop/performance/Audience.java
  4. 13 0
      spring-demo/src/main/java/com/sf/aop/performance/AudienceAnno.java
  5. 18 0
      spring-demo/src/main/java/com/sf/aop/performance/MyConfig.java
  6. 5 0
      spring-demo/src/main/java/com/sf/aop/performance/Performance.java
  7. 11 0
      spring-demo/src/main/java/com/sf/aop/performance/SleepNoMore.java
  8. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/GamePlayer.java
  9. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/GamePlayerProxy.java
  10. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/IGamePlayer.java
  11. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/Test.java
  12. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/dynamic/MyInvocationHandler.java
  13. 3 3
      spring-demo/src/main/java/com/sf/aop/proxy/dynamic/Test.java
  14. 61 0
      spring-demo/src/main/java/com/sf/aop/proxy/self/JdkProxyDemo.java
  15. 48 0
      spring-demo/src/main/java/com/sf/aop/proxy/self/MyCglibProxyDemo.java
  16. 1 1
      spring-demo/src/main/java/com/sf/aop/simple/BaseService.java
  17. 1 1
      spring-demo/src/main/java/com/sf/aop/simple/MyAfterAdvice.java
  18. 1 1
      spring-demo/src/main/java/com/sf/aop/simple/MyBeforeAdvice.java
  19. 1 1
      spring-demo/src/main/java/com/sf/aop/simple/Person.java
  20. 42 0
      spring-demo/src/main/java/com/sf/druid/DruidConfig.java
  21. 13 0
      spring-demo/src/main/java/com/sf/druid/SpringConfig.java
  22. 9 0
      spring-demo/src/main/java/com/sf/druid/dao/BookDao.java
  23. 27 0
      spring-demo/src/main/java/com/sf/druid/dao/BookDaoImpl.java
  24. 30 0
      spring-demo/src/main/java/com/sf/druid/entity/Book.java
  25. 1 1
      spring-demo/src/main/java/com/sf/ioc/annotation/Chair.java
  26. 2 3
      spring-demo/src/main/java/com/sf/ioc/annotation/House.java
  27. 1 1
      spring-demo/src/main/java/com/sf/ioc/annotation/Teacher.java
  28. 1 1
      spring-demo/src/main/java/com/sf/ioc/annotation/plane/Box.java
  29. 1 2
      spring-demo/src/main/java/com/sf/ioc/annotation/plane/Desk.java
  30. 1 1
      spring-demo/src/main/java/com/sf/ioc/annotation/plane/Plane.java
  31. 1 1
      spring-demo/src/main/java/com/sf/ioc/auto/Chair.java
  32. 1 1
      spring-demo/src/main/java/com/sf/ioc/auto/House.java
  33. 1 1
      spring-demo/src/main/java/com/sf/ioc/auto/Teacher.java
  34. 1 1
      spring-demo/src/main/java/com/sf/ioc/config/MyBean.java
  35. 1 1
      spring-demo/src/main/java/com/sf/ioc/config/PropertiesConfig.java
  36. 2 2
      spring-demo/src/main/java/com/sf/ioc/config/SpringConfig.java
  37. 1 1
      spring-demo/src/main/java/com/sf/ioc/config/condition/MacCondition.java
  38. 1 1
      spring-demo/src/main/java/com/sf/ioc/config/condition/Person.java
  39. 1 1
      spring-demo/src/main/java/com/sf/ioc/config/condition/PersonConfig.java
  40. 1 1
      spring-demo/src/main/java/com/sf/ioc/config/condition/WindowsCondition.java
  41. 1 1
      spring-demo/src/main/java/com/sf/ioc/factory/Car.java
  42. 1 1
      spring-demo/src/main/java/com/sf/ioc/factory/CarInstanceFactory.java
  43. 1 1
      spring-demo/src/main/java/com/sf/ioc/factory/CarStaticFactory.java
  44. 1 1
      spring-demo/src/main/java/com/sf/ioc/factory/Test.java
  45. 1 1
      spring-demo/src/main/java/com/sf/ioc/lifecycle/MyBeanPost.java
  46. 1 1
      spring-demo/src/main/java/com/sf/ioc/list/Chair.java
  47. 1 1
      spring-demo/src/main/java/com/sf/ioc/list/House.java
  48. 1 1
      spring-demo/src/main/java/com/sf/ioc/self/BeanDefined.java
  49. 6 8
      spring-demo/src/main/java/com/sf/ioc/self/BeanFactory.java
  50. 1 1
      spring-demo/src/main/java/com/sf/ioc/self/PropertyDefined.java
  51. 8 9
      spring-demo/src/main/java/com/sf/ioc/self/TestSelf.java
  52. 1 1
      spring-demo/src/main/java/com/sf/ioc/self/lxl/BeanDefined.java
  53. 1 1
      spring-demo/src/main/java/com/sf/ioc/self/lxl/BeanFactory.java
  54. 1 1
      spring-demo/src/main/java/com/sf/ioc/self/lxl/PropertyDefined.java
  55. 2 2
      spring-demo/src/main/java/com/sf/ioc/self/lxl/TestSelf.java
  56. 4 4
      spring-demo/src/main/java/com/sf/ioc/self/zfx/BeanFactory.java
  57. 6 7
      spring-demo/src/main/java/com/sf/ioc/self/zfx/TestSelf.java
  58. 1 1
      spring-demo/src/main/java/com/sf/ioc/simple/Auth.java
  59. 1 1
      spring-demo/src/main/java/com/sf/ioc/simple/Role.java
  60. 2 2
      spring-demo/src/main/java/com/sf/ioc/simple/User.java
  61. 1 1
      spring-demo/src/main/java/com/sf/ioc/singleton/Singleton1.java
  62. 1 1
      spring-demo/src/main/java/com/sf/ioc/singleton/Singleton2.java
  63. 1 1
      spring-demo/src/main/java/com/sf/ioc/singleton/Singleton3.java
  64. 1 1
      spring-demo/src/main/java/com/sf/ioc/singleton/Singleton4.java
  65. 1 1
      spring-demo/src/main/java/com/sf/ioc/singleton/Test.java
  66. 6 6
      spring-demo/src/main/java/com/sf/test/TestReflect.java
  67. 3 3
      spring-demo/src/main/resources/aop/bean-advisor.xml
  68. 2 2
      spring-demo/src/main/resources/aop/bean-aop.xml
  69. 24 0
      spring-demo/src/main/resources/aop/bean-performance.xml
  70. 19 0
      spring-demo/src/main/resources/bean-druid.xml
  71. 2 2
      spring-demo/src/main/resources/book.properties
  72. 4 0
      spring-demo/src/main/resources/db.properties
  73. 0 0
      spring-demo/src/main/resources/ioc/bean-annotation.xml
  74. 3 3
      spring-demo/src/main/resources/ioc/bean-auto.xml
  75. 4 4
      spring-demo/src/main/resources/ioc/bean-factory.xml
  76. 2 2
      spring-demo/src/main/resources/ioc/bean-lifecycle.xml
  77. 6 6
      spring-demo/src/main/resources/ioc/bean-list.xml
  78. 1 1
      spring-demo/src/main/resources/ioc/bean-other.xml
  79. 2 2
      spring-demo/src/main/resources/ioc/bean-prototype.xml
  80. 5 5
      spring-demo/src/main/resources/ioc/bean.xml
  81. 0 11
      spring-demo/src/test/java/com/sf/Test.java
  82. 23 0
      spring-demo/src/test/java/com/sf/TestBook.java
  83. 22 0
      spring-demo/src/test/java/com/sf/TestDruid.java
  84. 3 3
      spring-demo/src/test/java/com/sf/aop/TestAdvisor.java
  85. 3 3
      spring-demo/src/test/java/com/sf/aop/TestAop.java
  86. 19 0
      spring-demo/src/test/java/com/sf/aop/TestPerformAnno.java
  87. 29 0
      spring-demo/src/test/java/com/sf/aop/TestPerformance.java
  88. 3 3
      spring-demo/src/test/java/com/sf/ioc/TestAuto.java
  89. 13 11
      spring-demo/src/test/java/com/sf/ioc/TestBean.java
  90. 3 3
      spring-demo/src/test/java/com/sf/ioc/TestBeanList.java
  91. 3 3
      spring-demo/src/test/java/com/sf/ioc/TestConfig.java
  92. 4 4
      spring-demo/src/test/java/com/sf/ioc/TestFactory.java
  93. 3 3
      spring-demo/src/test/java/com/sf/ioc/TestPerson.java
  94. 3 5
      spring-demo/src/test/java/com/sf/ioc/TestProperties.java
  95. 6 3
      spring-demo/src/test/java/com/sf/ioc/TestPrototype.java
  96. 4 7
      spring-demo/src/test/java/com/sf/ioc/TestSpring.java
  97. 1 1
      spring-demo/src/test/java/com/sf/student/TestLSY.java
  98. 1 1
      spring-demo/src/test/java/com/sf/student/TestTang.java
  99. 1 1
      spring-demo/src/test/java/com/sf/student/TestZFX.java

+ 65 - 3
spring-demo/pom.xml

@@ -1,5 +1,8 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+         http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 
     <groupId>com.sf</groupId>
     <groupId>com.sf</groupId>
@@ -12,7 +15,6 @@
 
 
     <properties>
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <kotlin.version>2.0.0-Beta2</kotlin.version>
     </properties>
     </properties>
 
 
     <dependencies>
     <dependencies>
@@ -48,6 +50,12 @@
             <version>3.0.0-M1</version>
             <version>3.0.0-M1</version>
         </dependency>
         </dependency>
 
 
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib</artifactId>
+            <version>3.3.0</version>
+        </dependency>
+
         <!-- maven search -->
         <!-- maven search -->
         <!--    <dependency>-->
         <!--    <dependency>-->
         <!--      <groupId>org.springframework</groupId>-->
         <!--      <groupId>org.springframework</groupId>-->
@@ -55,8 +63,62 @@
         <!--      <version>6.1.1</version>-->
         <!--      <version>6.1.1</version>-->
         <!--    </dependency>-->
         <!--    </dependency>-->
 
 
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-aspects</artifactId>
+            <version>6.1.2</version>
+        </dependency>
+        <!--aspectj支持-->
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+            <version>1.9.21.M1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjweaver</artifactId>
+            <version>1.9.21.M1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.33</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.2.20</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jdbc</artifactId>
+            <version>6.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.30</version>
+        </dependency>
 
 
     </dependencies>
     </dependencies>
 
 
+    <!--解决IDEA中MAVEN项目总是将LANGUAGE LEVEL重置到5的问题
+        https://blog.csdn.net/Montaro2017/article/details/107375120
+        虽然也可以修改maven中默认的jdk版本  但是不建议-->
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.11.0</version>
+                <configuration>
+                    <source>17</source>
+                    <target>17</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
 
 </project>
 </project>

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/advisor/MyClassFilter.java

@@ -1,6 +1,6 @@
 package com.sf.aop.advisor;
 package com.sf.aop.advisor;
 
 
-import com.sf.aop.Person;
+import com.sf.aop.simple.Person;
 import org.springframework.aop.ClassFilter;
 import org.springframework.aop.ClassFilter;
 
 
 // 在类的级别上进行过滤和拦截
 // 在类的级别上进行过滤和拦截

+ 12 - 0
spring-demo/src/main/java/com/sf/aop/performance/Audience.java

@@ -0,0 +1,12 @@
+package com.sf.aop.performance;
+
+/**
+ * 观众 是这里的切面
+ */
+public class Audience {
+
+    // 表演之前 或 之后  鼓掌
+    public void applause(){
+        System.out.println("呱唧 呱唧 呱唧");
+    }
+}

+ 13 - 0
spring-demo/src/main/java/com/sf/aop/performance/AudienceAnno.java

@@ -0,0 +1,13 @@
+package com.sf.aop.performance;
+
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+
+@Aspect
+public class AudienceAnno {
+
+    @AfterReturning("execution(* com.sf.aop.performance.Performance.perform())")
+    public void applause(){
+        System.out.println("呱唧 呱唧 呱唧");
+    }
+}

+ 18 - 0
spring-demo/src/main/java/com/sf/aop/performance/MyConfig.java

@@ -0,0 +1,18 @@
+package com.sf.aop.performance;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+
+// 如果要使用一个 非必需功能 需要配置是否打开开关
+@Configuration
+@ComponentScan
+@EnableAspectJAutoProxy
+public class MyConfig {
+
+    @Bean
+    public AudienceAnno audienceAnno() {
+        return new AudienceAnno();
+    }
+}

+ 5 - 0
spring-demo/src/main/java/com/sf/aop/performance/Performance.java

@@ -0,0 +1,5 @@
+package com.sf.aop.performance;
+
+public interface Performance {
+    void perform();
+}

+ 11 - 0
spring-demo/src/main/java/com/sf/aop/performance/SleepNoMore.java

@@ -0,0 +1,11 @@
+package com.sf.aop.performance;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class SleepNoMore implements Performance{
+    @Override
+    public void perform() {
+        System.out.println("表演戏剧《不眠之夜》");
+    }
+}

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/GamePlayer.java → spring-demo/src/main/java/com/sf/aop/proxy/GamePlayer.java

@@ -1,4 +1,4 @@
-package com.sf.proxy;
+package com.sf.aop.proxy;
 
 
 public class GamePlayer implements IGamePlayer {
 public class GamePlayer implements IGamePlayer {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/GamePlayerProxy.java → spring-demo/src/main/java/com/sf/aop/proxy/GamePlayerProxy.java

@@ -1,4 +1,4 @@
-package com.sf.proxy;
+package com.sf.aop.proxy;
 
 
 /**
 /**
  * 接受代理需求的店铺
  * 接受代理需求的店铺

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/IGamePlayer.java → spring-demo/src/main/java/com/sf/aop/proxy/IGamePlayer.java

@@ -1,4 +1,4 @@
-package com.sf.proxy;
+package com.sf.aop.proxy;
 
 
 /**
 /**
  * 玩游戏的需求
  * 玩游戏的需求

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/Test.java → spring-demo/src/main/java/com/sf/aop/proxy/Test.java

@@ -1,4 +1,4 @@
-package com.sf.proxy;
+package com.sf.aop.proxy;
 
 
 public class Test {
 public class Test {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/dynamic/MyInvocationHandler.java → spring-demo/src/main/java/com/sf/aop/proxy/dynamic/MyInvocationHandler.java

@@ -1,4 +1,4 @@
-package com.sf.proxy.dynamic;
+package com.sf.aop.proxy.dynamic;
 
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;

+ 3 - 3
spring-demo/src/main/java/com/sf/proxy/dynamic/Test.java → spring-demo/src/main/java/com/sf/aop/proxy/dynamic/Test.java

@@ -1,7 +1,7 @@
-package com.sf.proxy.dynamic;
+package com.sf.aop.proxy.dynamic;
 
 
-import com.sf.proxy.GamePlayer;
-import com.sf.proxy.IGamePlayer;
+import com.sf.aop.proxy.GamePlayer;
+import com.sf.aop.proxy.IGamePlayer;
 
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Proxy;

+ 61 - 0
spring-demo/src/main/java/com/sf/aop/proxy/self/JdkProxyDemo.java

@@ -0,0 +1,61 @@
+package com.sf.aop.proxy.self;
+
+import java.lang.reflect.Proxy;
+
+public class JdkProxyDemo {
+    interface Life {
+        int learn(String sth);
+    }
+
+    static class MyLife implements Life {
+        @Override
+        public int learn(String sth) {
+            System.out.println(sth + " learn spring");
+            return 0;
+        }
+    }
+
+    public static void main(String[] args) {
+        // 先创建一个要被代理的对象  也被称之为目标
+        MyLife target = new MyLife();
+        // 对MyLife -> Life 的动态代理
+        // ClassLoader loader,Class<?>[] interfaces,InvocationHandler h
+        // 获取类加载器的方式
+        ClassLoader classLoader = JdkProxyDemo.class.getClassLoader();
+        // 被代理接口组成的数组
+        Class[] classArr = new Class[]{Life.class};
+        // 匿名内部类
+//        Proxy.newProxyInstance(classLoader, classArr, new InvocationHandler() {
+//            @Override
+//            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+//                return null;
+//            }
+//        });
+        // lambda表达式 可以替换匿名内部类
+        //  此时只关心方法体的实现  不关心类名和方法名  都可以去掉
+        //  () -> {}
+        //  方法的参数  可以没有参数类型  只有参数名
+        //  方法的执行逻辑   可以有返回结果也可以没有
+        Life proxyInstance = (Life) Proxy.newProxyInstance(classLoader, classArr,
+                (proxy, method, args1) -> {
+                    // 代理要做的事儿
+                    // 前置处理
+                    System.out.println("learn reflect");
+                    // 被代理对象 自己的逻辑
+                    // result = target.learn(args1);
+                    Object result = method.invoke(target, args1);
+                    // 后置处理
+                    System.out.println("learn spring mvc");
+                    return result;
+                });
+        // 传入了被代理对象的接口  返回的代理对象的类型也是这个接口
+        // 动态代理的实现 必须有一个接口 原因是  动态生成的代理类需要实现这个接口
+        // 此时 代理类ProxyInstance 和 被代理类 MyLife 是兄弟关系
+        int learn = proxyInstance.learn("qizao");
+        System.out.println(learn);
+        // 无侵入: 代理对象 不会对 被代理对象有更改
+        //  只会在执行之前或执行之后  增加一些逻辑
+        //  叫做 "增强"
+    }
+
+}

+ 48 - 0
spring-demo/src/main/java/com/sf/aop/proxy/self/MyCglibProxyDemo.java

@@ -0,0 +1,48 @@
+package com.sf.aop.proxy.self;
+
+import org.springframework.cglib.proxy.Enhancer;
+import org.springframework.cglib.proxy.MethodInterceptor;
+import org.springframework.cglib.proxy.MethodProxy;
+
+import java.lang.reflect.Method;
+
+public class MyCglibProxyDemo {
+    // 如果把被代理类设置成final 类不能被继承  报错如下
+    // Cannot subclass final class com.sf.proxy.self.MyCglibProxyDemo$MyLife
+    static class MyLife {
+        // 如果把被代理类的方法设置为final  方法不能被重写
+        // 不会报错  但是代理的逻辑不会运行
+        // 因为无法重写时  只能直接调用父类的方法
+        public void learn() {
+            System.out.println("learn spring");
+        }
+    }
+
+    public static void main(String[] args) {
+        MyLife target = new MyLife();
+        // 没有接口  只有一个要被代理的类
+        // cglib和jdk的区别:不依赖接口
+//        Enhancer.create(MyLife.class, new MethodInterceptor() {
+//            @Override
+//            public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
+//                return null;
+//            }
+//        });
+        // public interface MethodInterceptor extends Callback
+        // Class type, Callback callback
+        // 动态代理需要的参数是一致的  被代理的类  代理过程的处理逻辑
+        //  MyLife 被代理的  ProxyInstance 代理的
+        MyLife proxyInstance = (MyLife) Enhancer.create(
+                MyLife.class, (MethodInterceptor) (obj, method, args1, proxy) -> {
+                    System.out.println("learn reflect");
+                    // target.learn();
+                    Object result = method.invoke(target, args1);
+                    System.out.println("learn spring mvc");
+                    return result;
+                });
+        // 为什么 Enhancer.create()创建的代理对象 可以被转化成MyLife
+        //   ProxyClass instanceOf MyLife
+        //   ProxyClass extends MyLife   构成父子关系
+        proxyInstance.learn();
+    }
+}

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/BaseService.java → spring-demo/src/main/java/com/sf/aop/simple/BaseService.java

@@ -1,4 +1,4 @@
-package com.sf.aop;
+package com.sf.aop.simple;
 
 
 public interface BaseService {
 public interface BaseService {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/MyAfterAdvice.java → spring-demo/src/main/java/com/sf/aop/simple/MyAfterAdvice.java

@@ -1,4 +1,4 @@
-package com.sf.aop;
+package com.sf.aop.simple;
 
 
 import org.springframework.aop.AfterReturningAdvice;
 import org.springframework.aop.AfterReturningAdvice;
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/MyBeforeAdvice.java → spring-demo/src/main/java/com/sf/aop/simple/MyBeforeAdvice.java

@@ -1,4 +1,4 @@
-package com.sf.aop;
+package com.sf.aop.simple;
 
 
 import org.springframework.aop.MethodBeforeAdvice;
 import org.springframework.aop.MethodBeforeAdvice;
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/Person.java → spring-demo/src/main/java/com/sf/aop/simple/Person.java

@@ -1,4 +1,4 @@
-package com.sf.aop;
+package com.sf.aop.simple;
 
 
 public class Person implements BaseService {
 public class Person implements BaseService {
 
 

+ 42 - 0
spring-demo/src/main/java/com/sf/druid/DruidConfig.java

@@ -0,0 +1,42 @@
+package com.sf.druid;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+
+@PropertySource("db.properties")
+public class DruidConfig {
+
+    @Value("${jdbc.url}")
+    private String url;
+
+    @Value("${jdbc.driver}")
+    private String driver;
+
+    @Value("${jdbc.username}")
+    private String username;
+
+    @Value("${jdbc.password}")
+    private String password;
+
+    @Bean(name = "dataSource")
+    public DataSource createDataSource(){
+        DruidDataSource dataSource = new DruidDataSource();
+        dataSource.setDriverClassName(driver);
+        dataSource.setUrl(url);
+        dataSource.setUsername(username);
+        dataSource.setPassword(password);
+        return dataSource;
+    }
+
+    // 新的bean  jdbcTemplate 使用jdbc的模版类
+    @Bean(name = "jdbcTemplate")
+    public JdbcTemplate createJdbcTemplate(DataSource dataSource) {
+        return new JdbcTemplate(dataSource);
+    }
+
+}

+ 13 - 0
spring-demo/src/main/java/com/sf/druid/SpringConfig.java

@@ -0,0 +1,13 @@
+package com.sf.druid;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+// 如果想要在主配置文件中 导入其他的配置文件 可以使用注解 @Import
+// 后面使用 要导入的配置类
+@Configuration
+@ComponentScan
+@Import(DruidConfig.class)
+public class SpringConfig {
+}

+ 9 - 0
spring-demo/src/main/java/com/sf/druid/dao/BookDao.java

@@ -0,0 +1,9 @@
+package com.sf.druid.dao;
+
+import com.sf.druid.entity.Book;
+
+import java.util.List;
+
+public interface BookDao {
+    List<Book> findAll();
+}

+ 27 - 0
spring-demo/src/main/java/com/sf/druid/dao/BookDaoImpl.java

@@ -0,0 +1,27 @@
+package com.sf.druid.dao;
+
+import com.sf.druid.entity.Book;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+// dao层  对数据增删改查的一层
+//@Component
+//  @Repository 是一个具体的@Component  是操作数据库的bean
+@Repository
+public class BookDaoImpl implements BookDao{
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Override
+    public List<Book> findAll() {
+        List<Book> bookList = jdbcTemplate.
+                query("select * from book", new BeanPropertyRowMapper<Book>(Book.class));
+        return bookList;
+    }
+}

+ 30 - 0
spring-demo/src/main/java/com/sf/druid/entity/Book.java

@@ -0,0 +1,30 @@
+package com.sf.druid.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+// 通过两个插件  组成一个简单的 javabean entity
+@Data
+public class Book implements Serializable {
+    private static final long serialVersionUID = -8962182349002967026L;
+//    private static final long serialVersionUID = -544141905782858543L;
+
+    private Long id;
+
+    private String bookId;
+
+    private String bookName;
+
+    private String typeId;
+
+    private String authorId;
+
+    private String authorName;
+
+    private String bookImg;
+
+    private String bookDesc;
+
+
+}

+ 1 - 1
spring-demo/src/main/java/com/sf/annotation/Chair.java → spring-demo/src/main/java/com/sf/ioc/annotation/Chair.java

@@ -1,4 +1,4 @@
-package com.sf.annotation;
+package com.sf.ioc.annotation;
 
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;

+ 2 - 3
spring-demo/src/main/java/com/sf/annotation/House.java → spring-demo/src/main/java/com/sf/ioc/annotation/House.java

@@ -1,9 +1,8 @@
-package com.sf.annotation;
+package com.sf.ioc.annotation;
 
 
-import com.sf.annotation.plane.Plane;
+import com.sf.ioc.annotation.plane.Plane;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 /**
 /**

+ 1 - 1
spring-demo/src/main/java/com/sf/annotation/Teacher.java → spring-demo/src/main/java/com/sf/ioc/annotation/Teacher.java

@@ -1,4 +1,4 @@
-package com.sf.annotation;
+package com.sf.ioc.annotation;
 
 
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/annotation/plane/Box.java → spring-demo/src/main/java/com/sf/ioc/annotation/plane/Box.java

@@ -1,4 +1,4 @@
-package com.sf.annotation.plane;
+package com.sf.ioc.annotation.plane;
 
 
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 

+ 1 - 2
spring-demo/src/main/java/com/sf/annotation/plane/Desk.java → spring-demo/src/main/java/com/sf/ioc/annotation/plane/Desk.java

@@ -1,6 +1,5 @@
-package com.sf.annotation.plane;
+package com.sf.ioc.annotation.plane;
 
 
-import com.sf.annotation.plane.Plane;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 @Component
 @Component

+ 1 - 1
spring-demo/src/main/java/com/sf/annotation/plane/Plane.java → spring-demo/src/main/java/com/sf/ioc/annotation/plane/Plane.java

@@ -1,4 +1,4 @@
-package com.sf.annotation.plane;
+package com.sf.ioc.annotation.plane;
 
 
 public interface Plane {
 public interface Plane {
     // 平面
     // 平面

+ 1 - 1
spring-demo/src/main/java/com/sf/auto/Chair.java → spring-demo/src/main/java/com/sf/ioc/auto/Chair.java

@@ -1,4 +1,4 @@
-package com.sf.auto;
+package com.sf.ioc.auto;
 
 
 public class Chair {
 public class Chair {
     // 椅子
     // 椅子

+ 1 - 1
spring-demo/src/main/java/com/sf/auto/House.java → spring-demo/src/main/java/com/sf/ioc/auto/House.java

@@ -1,4 +1,4 @@
-package com.sf.auto;
+package com.sf.ioc.auto;
 
 
 public class House {
 public class House {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/auto/Teacher.java → spring-demo/src/main/java/com/sf/ioc/auto/Teacher.java

@@ -1,4 +1,4 @@
-package com.sf.auto;
+package com.sf.ioc.auto;
 
 
 public class Teacher {
 public class Teacher {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/config/MyBean.java → spring-demo/src/main/java/com/sf/ioc/config/MyBean.java

@@ -1,4 +1,4 @@
-package com.sf.config;
+package com.sf.ioc.config;
 
 
 public class MyBean {
 public class MyBean {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/config/PropertiesConfig.java → spring-demo/src/main/java/com/sf/ioc/config/PropertiesConfig.java

@@ -1,4 +1,4 @@
-package com.sf.config;
+package com.sf.ioc.config;
 
 
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;

+ 2 - 2
spring-demo/src/main/java/com/sf/config/SpringConfig.java → spring-demo/src/main/java/com/sf/ioc/config/SpringConfig.java

@@ -1,4 +1,4 @@
-package com.sf.config;
+package com.sf.ioc.config;
 
 
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
@@ -6,6 +6,6 @@ import org.springframework.context.annotation.Configuration;
 // 声明这是一个spring的配置类  相当于是以前的xml文件
 // 声明这是一个spring的配置类  相当于是以前的xml文件
 // 全注解开发的方式  将xml的使用方式 简化为注解
 // 全注解开发的方式  将xml的使用方式 简化为注解
 @Configuration
 @Configuration
-@ComponentScan("com.sf.annotation")
+@ComponentScan("com.sf.ioc.annotation")
 public class SpringConfig {
 public class SpringConfig {
 }
 }

+ 1 - 1
spring-demo/src/main/java/com/sf/config/condition/MacCondition.java → spring-demo/src/main/java/com/sf/ioc/config/condition/MacCondition.java

@@ -1,4 +1,4 @@
-package com.sf.config.condition;
+package com.sf.ioc.config.condition;
 
 
 import org.springframework.context.annotation.Condition;
 import org.springframework.context.annotation.Condition;
 import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.ConditionContext;

+ 1 - 1
spring-demo/src/main/java/com/sf/config/condition/Person.java → spring-demo/src/main/java/com/sf/ioc/config/condition/Person.java

@@ -1,4 +1,4 @@
-package com.sf.config.condition;
+package com.sf.ioc.config.condition;
 
 
 public class Person {
 public class Person {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/config/condition/PersonConfig.java → spring-demo/src/main/java/com/sf/ioc/config/condition/PersonConfig.java

@@ -1,4 +1,4 @@
-package com.sf.config.condition;
+package com.sf.ioc.config.condition;
 
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Conditional;

+ 1 - 1
spring-demo/src/main/java/com/sf/config/condition/WindowsCondition.java → spring-demo/src/main/java/com/sf/ioc/config/condition/WindowsCondition.java

@@ -1,4 +1,4 @@
-package com.sf.config.condition;
+package com.sf.ioc.config.condition;
 
 
 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
 import org.springframework.context.annotation.Condition;
 import org.springframework.context.annotation.Condition;

+ 1 - 1
spring-demo/src/main/java/com/sf/factory/Car.java → spring-demo/src/main/java/com/sf/ioc/factory/Car.java

@@ -1,4 +1,4 @@
-package com.sf.factory;
+package com.sf.ioc.factory;
 
 
 public class Car {
 public class Car {
     private int id;
     private int id;

+ 1 - 1
spring-demo/src/main/java/com/sf/factory/CarInstanceFactory.java → spring-demo/src/main/java/com/sf/ioc/factory/CarInstanceFactory.java

@@ -1,4 +1,4 @@
-package com.sf.factory;
+package com.sf.ioc.factory;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;

+ 1 - 1
spring-demo/src/main/java/com/sf/factory/CarStaticFactory.java → spring-demo/src/main/java/com/sf/ioc/factory/CarStaticFactory.java

@@ -1,4 +1,4 @@
-package com.sf.factory;
+package com.sf.ioc.factory;
 
 
 
 
 import java.util.HashMap;
 import java.util.HashMap;

+ 1 - 1
spring-demo/src/main/java/com/sf/factory/Test.java → spring-demo/src/main/java/com/sf/ioc/factory/Test.java

@@ -1,4 +1,4 @@
-package com.sf.factory;
+package com.sf.ioc.factory;
 
 
 public class Test {
 public class Test {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/lifecycle/MyBeanPost.java → spring-demo/src/main/java/com/sf/ioc/lifecycle/MyBeanPost.java

@@ -1,4 +1,4 @@
-package com.sf.lifecycle;
+package com.sf.ioc.lifecycle;
 
 
 import org.springframework.beans.BeansException;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.beans.factory.config.BeanPostProcessor;

+ 1 - 1
spring-demo/src/main/java/com/sf/list/Chair.java → spring-demo/src/main/java/com/sf/ioc/list/Chair.java

@@ -1,4 +1,4 @@
-package com.sf.list;
+package com.sf.ioc.list;
 
 
 /**
 /**
  * 椅子
  * 椅子

+ 1 - 1
spring-demo/src/main/java/com/sf/list/House.java → spring-demo/src/main/java/com/sf/ioc/list/House.java

@@ -1,4 +1,4 @@
-package com.sf.list;
+package com.sf.ioc.list;
 
 
 import java.util.List;
 import java.util.List;
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/self/lxl/BeanDefined.java → spring-demo/src/main/java/com/sf/ioc/self/BeanDefined.java

@@ -1,4 +1,4 @@
-package com.sf.self.lxl;
+package com.sf.ioc.self;
 
 
 import java.util.List;
 import java.util.List;
 
 

+ 6 - 8
spring-demo/src/main/java/com/sf/self/BeanFactory.java → spring-demo/src/main/java/com/sf/ioc/self/BeanFactory.java

@@ -1,6 +1,4 @@
-package com.sf.self;
-
-import com.sf.factory.Car;
+package com.sf.ioc.self;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
@@ -10,8 +8,8 @@ import java.util.Map;
 //   先要获取对bean的配置   id class
 //   先要获取对bean的配置   id class
 //    存储这多个bean的配置  beanDefinedList
 //    存储这多个bean的配置  beanDefinedList
 public class BeanFactory {
 public class BeanFactory {
-    // user  com.sf.User
-    // user1  com.sf.User
+    // user  com.sf.simple.User
+    // user1  com.sf.simple.User
     private List<BeanDefined> beanDefinedList;
     private List<BeanDefined> beanDefinedList;
     private Map<String, BeanFactory> beanMap = new HashMap<>();
     private Map<String, BeanFactory> beanMap = new HashMap<>();
     // <beanId, Bean对象>
     // <beanId, Bean对象>
@@ -32,9 +30,9 @@ public class BeanFactory {
     // 模拟通过beanId 获取bean
     // 模拟通过beanId 获取bean
     //  返回的是对象
     //  返回的是对象
     public Object getBean(String beanId){
     public Object getBean(String beanId){
-        // user2  com.sf.User
-        // user1  com.sf.User
-        // user  com.sf.User
+        // user2  com.sf.simple.User
+        // user1  com.sf.simple.User
+        // user  com.sf.simple.User
         Object obj = null;
         Object obj = null;
         for (BeanDefined beanDefined : beanDefinedList) {
         for (BeanDefined beanDefined : beanDefinedList) {
             // 判断当前的bean是否是传进来的id
             // 判断当前的bean是否是传进来的id

+ 1 - 1
spring-demo/src/main/java/com/sf/self/lxl/PropertyDefined.java → spring-demo/src/main/java/com/sf/ioc/self/PropertyDefined.java

@@ -1,4 +1,4 @@
-package com.sf.self.lxl;
+package com.sf.ioc.self;
 
 
 public class PropertyDefined {
 public class PropertyDefined {
 
 

+ 8 - 9
spring-demo/src/main/java/com/sf/self/TestSelf.java → spring-demo/src/main/java/com/sf/ioc/self/TestSelf.java

@@ -1,7 +1,6 @@
-package com.sf.self;
+package com.sf.ioc.self;
 
 
-import com.sf.Role;
-import com.sf.User;
+import com.sf.ioc.simple.Role;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -9,12 +8,12 @@ import java.util.List;
 public class TestSelf {
 public class TestSelf {
 
 
     public static void main(String[] args) {
     public static void main(String[] args) {
-        BeanDefined userBean = new BeanDefined("user","com.sf.User");
-        BeanDefined userBean1 = new BeanDefined("user1","com.sf.User");
+        BeanDefined userBean = new BeanDefined("user","com.sf.simple.User");
+        BeanDefined userBean1 = new BeanDefined("user1","com.sf.simple.User");
 
 
         /**
         /**
-         *     <bean id="user" class="com.sf.User"></bean>
-         *     <bean id="user1" class="com.sf.User"></bean>
+         *     <bean id="user" class="com.sf.simple.User"></bean>
+         *     <bean id="user1" class="com.sf.simple.User"></bean>
          */
          */
         // 识别bean.xml的过程
         // 识别bean.xml的过程
         List<BeanDefined> list = new ArrayList<>();
         List<BeanDefined> list = new ArrayList<>();
@@ -22,9 +21,9 @@ public class TestSelf {
         list.add(userBean1);
         list.add(userBean1);
 
 
         /**
         /**
-         *     <bean id="role" class="com.sf.Role"></bean>
+         *     <bean id="role" class="com.sf.simple.Role"></bean>
          */
          */
-        BeanDefined roleBean = new BeanDefined("role","com.sf.Role");
+        BeanDefined roleBean = new BeanDefined("role","com.sf.simple.Role");
         List<BeanDefined> listOther = new ArrayList<>();
         List<BeanDefined> listOther = new ArrayList<>();
         list.add(roleBean);
         list.add(roleBean);
 //        list.add(userBean1);
 //        list.add(userBean1);

+ 1 - 1
spring-demo/src/main/java/com/sf/self/BeanDefined.java → spring-demo/src/main/java/com/sf/ioc/self/lxl/BeanDefined.java

@@ -1,4 +1,4 @@
-package com.sf.self;
+package com.sf.ioc.self.lxl;
 
 
 import java.util.List;
 import java.util.List;
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/self/lxl/BeanFactory.java → spring-demo/src/main/java/com/sf/ioc/self/lxl/BeanFactory.java

@@ -1,4 +1,4 @@
-package com.sf.self.lxl;
+package com.sf.ioc.self.lxl;
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 import java.util.List;
 import java.util.List;
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/self/PropertyDefined.java → spring-demo/src/main/java/com/sf/ioc/self/lxl/PropertyDefined.java

@@ -1,4 +1,4 @@
-package com.sf.self;
+package com.sf.ioc.self.lxl;
 
 
 public class PropertyDefined {
 public class PropertyDefined {
 
 

+ 2 - 2
spring-demo/src/main/java/com/sf/self/lxl/TestSelf.java → spring-demo/src/main/java/com/sf/ioc/self/lxl/TestSelf.java

@@ -1,6 +1,6 @@
-package com.sf.self.lxl;
+package com.sf.ioc.self.lxl;
 
 
-import com.sf.User;
+import com.sf.ioc.simple.User;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;

+ 4 - 4
spring-demo/src/main/java/com/sf/self/zfx/BeanFactory.java → spring-demo/src/main/java/com/sf/ioc/self/zfx/BeanFactory.java

@@ -1,8 +1,8 @@
-package com.sf.self.zfx;
+package com.sf.ioc.self.zfx;
 
 
-import com.sf.User;
-import com.sf.self.BeanDefined;
-import com.sf.self.PropertyDefined;
+import com.sf.ioc.simple.User;
+import com.sf.ioc.self.PropertyDefined;
+import com.sf.ioc.self.BeanDefined;
 
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 import java.util.List;
 import java.util.List;

+ 6 - 7
spring-demo/src/main/java/com/sf/self/zfx/TestSelf.java → spring-demo/src/main/java/com/sf/ioc/self/zfx/TestSelf.java

@@ -1,9 +1,8 @@
-package com.sf.self.zfx;
+package com.sf.ioc.self.zfx;
 
 
-import com.sf.User;
-import com.sf.self.BeanDefined;
-import com.sf.self.BeanFactory;
-import com.sf.self.PropertyDefined;
+import com.sf.ioc.self.BeanFactory;
+import com.sf.ioc.self.PropertyDefined;
+import com.sf.ioc.self.BeanDefined;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -17,11 +16,11 @@ public class TestSelf {
         /*这个是bean中的配置*/
         /*这个是bean中的配置*/
         List<PropertyDefined> listPro = new ArrayList<>();
         List<PropertyDefined> listPro = new ArrayList<>();
         listPro.add(new PropertyDefined("name", "tom"));
         listPro.add(new PropertyDefined("name", "tom"));
-        BeanDefined userBean = new BeanDefined("user", "com.sf.User",listPro);
+        BeanDefined userBean = new BeanDefined("user", "com.sf.simple.User",listPro);
 
 
         List<BeanDefined> list = new ArrayList<>();
         List<BeanDefined> list = new ArrayList<>();
         list.add(userBean);
         list.add(userBean);
-        BeanFactory beanFactory = new BeanFactory(list);
+        com.sf.ioc.self.BeanFactory beanFactory = new BeanFactory(list);
 
 
         Object user = beanFactory.getBean("user");
         Object user = beanFactory.getBean("user");
         System.out.println(user);
         System.out.println(user);

+ 1 - 1
spring-demo/src/main/java/com/sf/Auth.java → spring-demo/src/main/java/com/sf/ioc/simple/Auth.java

@@ -1,4 +1,4 @@
-package com.sf;
+package com.sf.ioc.simple;
 
 
 /**
 /**
  * 权限
  * 权限

+ 1 - 1
spring-demo/src/main/java/com/sf/Role.java → spring-demo/src/main/java/com/sf/ioc/simple/Role.java

@@ -1,4 +1,4 @@
-package com.sf;
+package com.sf.ioc.simple;
 
 
 /**
 /**
  * 角色
  * 角色

+ 2 - 2
spring-demo/src/main/java/com/sf/User.java → spring-demo/src/main/java/com/sf/ioc/simple/User.java

@@ -1,4 +1,4 @@
-package com.sf;
+package com.sf.ioc.simple;
 
 
 // 面向对象
 // 面向对象
 // 类里面有什么 (成员)
 // 类里面有什么 (成员)
@@ -55,7 +55,7 @@ public class User {
     }
     }
 
 
     /**
     /**
-     *     <bean id="user1" class="com.sf.User">
+     *     <bean id="user1" class="com.sf.simple.User">
      *         <constructor-arg name="desc" value="nothing"></constructor-arg>
      *         <constructor-arg name="desc" value="nothing"></constructor-arg>
      *         <constructor-arg name="name" value="lisi"></constructor-arg>
      *         <constructor-arg name="name" value="lisi"></constructor-arg>
      *     </bean>
      *     </bean>

+ 1 - 1
spring-demo/src/main/java/com/sf/singleton/Singleton1.java → spring-demo/src/main/java/com/sf/ioc/singleton/Singleton1.java

@@ -1,4 +1,4 @@
-package com.sf.singleton;
+package com.sf.ioc.singleton;
 
 
 /**
 /**
  * 只创建一个实例(对象)
  * 只创建一个实例(对象)

+ 1 - 1
spring-demo/src/main/java/com/sf/singleton/Singleton2.java → spring-demo/src/main/java/com/sf/ioc/singleton/Singleton2.java

@@ -1,4 +1,4 @@
-package com.sf.singleton;
+package com.sf.ioc.singleton;
 
 
 public class Singleton2 {
 public class Singleton2 {
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/singleton/Singleton3.java → spring-demo/src/main/java/com/sf/ioc/singleton/Singleton3.java

@@ -1,4 +1,4 @@
-package com.sf.singleton;
+package com.sf.ioc.singleton;
 
 
 /**
 /**
  * 单例第二好的实现方式
  * 单例第二好的实现方式

+ 1 - 1
spring-demo/src/main/java/com/sf/singleton/Singleton4.java → spring-demo/src/main/java/com/sf/ioc/singleton/Singleton4.java

@@ -1,4 +1,4 @@
-package com.sf.singleton;
+package com.sf.ioc.singleton;
 
 
 /**
 /**
  * 单例最好的实现方式
  * 单例最好的实现方式

+ 1 - 1
spring-demo/src/main/java/com/sf/singleton/Test.java → spring-demo/src/main/java/com/sf/ioc/singleton/Test.java

@@ -1,4 +1,4 @@
-package com.sf.singleton;
+package com.sf.ioc.singleton;
 
 
 public class Test {
 public class Test {
 
 

+ 6 - 6
spring-demo/src/main/java/com/sf/test/TestReflect.java

@@ -13,7 +13,7 @@ package com.sf.test;
 // 代码也是对象
 // 代码也是对象
 //   User是类的对象   name是属性的对象   String是属性的数据类型对象  setName是方法的对象
 //   User是类的对象   name是属性的对象   String是属性的数据类型对象  setName是方法的对象
 
 
-import com.sf.User;
+import com.sf.ioc.simple.User;
 
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;
@@ -24,7 +24,7 @@ public class TestReflect {
     public static void main(String[] args) throws Exception {
     public static void main(String[] args) throws Exception {
         // 通过Class类 找到一个路径所对应的类文件
         // 通过Class类 找到一个路径所对应的类文件
         //   通过类文件 newInstance()方法来创建对象
         //   通过类文件 newInstance()方法来创建对象
-//        Class userClass = Class.forName("com.sf.User");
+//        Class userClass = Class.forName("com.sf.simple.User");
 //        User user = (User)userClass.newInstance();
 //        User user = (User)userClass.newInstance();
 //        System.out.println(user);
 //        System.out.println(user);
 //
 //
@@ -41,7 +41,7 @@ public class TestReflect {
     }
     }
 
 
     public static void test() throws Exception {
     public static void test() throws Exception {
-        Class userClass = Class.forName("com.sf.User");
+        Class userClass = Class.forName("com.sf.ioc.simple.User");
         //  userClass.newInstance();  已废弃
         //  userClass.newInstance();  已废弃
         //  jdk9以后 更支持通过构造器来创建对象
         //  jdk9以后 更支持通过构造器来创建对象
         User student = (User) userClass.getDeclaredConstructor().newInstance();
         User student = (User) userClass.getDeclaredConstructor().newInstance();
@@ -63,7 +63,7 @@ public class TestReflect {
 
 
     public static void testInvoke() throws Exception {
     public static void testInvoke() throws Exception {
         //使用反射机制调用方法
         //使用反射机制调用方法
-        Class objClass = Class.forName("com.sf.User");
+        Class objClass = Class.forName("com.sf.ioc.simple.User");
         // 创建对象
         // 创建对象
         Object obj = objClass.newInstance();
         Object obj = objClass.newInstance();
         // void setName(String name){}
         // void setName(String name){}
@@ -89,7 +89,7 @@ public class TestReflect {
          *  }
          *  }
          */
          */
         Class userClass = Class.forName("java.lang.String");
         Class userClass = Class.forName("java.lang.String");
-//        Class userClass = Class.forName("com.sf.User");
+//        Class userClass = Class.forName("com.sf.simple.User");
         // 获取类的修饰符 + class + 类名
         // 获取类的修饰符 + class + 类名
         //   修饰符本身是数字  转化成字符串  然后拼接其他
         //   修饰符本身是数字  转化成字符串  然后拼接其他
         s.append(Modifier.toString(userClass.getModifiers()) + " class "
         s.append(Modifier.toString(userClass.getModifiers()) + " class "
@@ -124,7 +124,7 @@ public class TestReflect {
      */
      */
     public static void testMethod() throws ClassNotFoundException {
     public static void testMethod() throws ClassNotFoundException {
         StringBuilder s = new StringBuilder();
         StringBuilder s = new StringBuilder();
-        Class userClass = Class.forName("com.sf.User");
+        Class userClass = Class.forName("com.sf.ioc.simple.User");
 //        userClass.getDeclaredMethods();
 //        userClass.getDeclaredMethods();
         Method[] methods = userClass.getMethods();
         Method[] methods = userClass.getMethods();
         for (Method method : methods) {
         for (Method method : methods) {

+ 3 - 3
spring-demo/src/main/resources/bean-advisor.xml → spring-demo/src/main/resources/aop/bean-advisor.xml

@@ -5,11 +5,11 @@
         https://www.springframework.org/schema/beans/spring-beans.xsd">
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
 
     <!-- 注册被监控的实现类 -->
     <!-- 注册被监控的实现类 -->
-    <bean id="person" class="com.sf.aop.Person"></bean>
+    <bean id="person" class="com.sf.aop.simple.Person"></bean>
 
 
     <!-- 注册通知实现类 -->
     <!-- 注册通知实现类 -->
-    <bean id="before" class="com.sf.aop.MyBeforeAdvice"></bean>
-    <bean id="after" class="com.sf.aop.MyAfterAdvice"></bean>
+    <bean id="before" class="com.sf.aop.simple.MyBeforeAdvice"></bean>
+    <bean id="after" class="com.sf.aop.simple.MyAfterAdvice"></bean>
 
 
     <!-- 注册类型过滤器 -->
     <!-- 注册类型过滤器 -->
     <bean id="classFilter" class="com.sf.aop.advisor.MyClassFilter"></bean>
     <bean id="classFilter" class="com.sf.aop.advisor.MyClassFilter"></bean>

+ 2 - 2
spring-demo/src/main/resources/bean-aop.xml → spring-demo/src/main/resources/aop/bean-aop.xml

@@ -5,10 +5,10 @@
         https://www.springframework.org/schema/beans/spring-beans.xsd">
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
 
     <!-- 注册被监控的实现类 -->
     <!-- 注册被监控的实现类 -->
-    <bean id="person" class="com.sf.aop.Person"></bean>
+    <bean id="person" class="com.sf.aop.simple.Person"></bean>
 
 
     <!-- 注册通知实现类 -->
     <!-- 注册通知实现类 -->
-    <bean id="before" class="com.sf.aop.MyBeforeAdvice"></bean>
+    <bean id="before" class="com.sf.aop.simple.MyBeforeAdvice"></bean>
 
 
     <!-- 注册代理监控对象生产工厂 ProxyFactoryBean -->
     <!-- 注册代理监控对象生产工厂 ProxyFactoryBean -->
     <bean id="personProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
     <bean id="personProxy" class="org.springframework.aop.framework.ProxyFactoryBean">

+ 24 - 0
spring-demo/src/main/resources/aop/bean-performance.xml

@@ -0,0 +1,24 @@
+<?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"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+        https://www.springframework.org/schema/beans/spring-beans.xsd 
+        http://www.springframework.org/schema/aop 
+        https://www.springframework.org/schema/aop/spring-aop.xsd">
+
+    <bean id = "performance" class="com.sf.aop.performance.SleepNoMore"></bean>
+    
+    <bean id = "audience" class="com.sf.aop.performance.Audience"></bean>
+    
+    <!-- 声明aop的配置  配置的是切面-->
+    <aop:config>
+        <!-- 切点的表达式 目的是配置一个 要代理的方法「类+方法」 方法还需要参数和返回类型 *代表任意类型-->
+        <aop:aspect ref="audience">
+            <aop:pointcut id="pointcut"
+                          expression="execution(* com.sf.aop.performance.Performance.perform())"/>
+            <aop:before method="applause" pointcut-ref="pointcut"></aop:before>
+            <aop:after-returning method="applause" pointcut-ref="pointcut"></aop:after-returning>
+        </aop:aspect>
+    </aop:config>
+</beans>

+ 19 - 0
spring-demo/src/main/resources/bean-druid.xml

@@ -0,0 +1,19 @@
+<?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
+        https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
+
+    <context:property-placeholder location="classpath:db.properties" />
+
+    <!--  完成数据库信息注入 是托管给spring容器来配置bean
+          按住ctrl验证关联关系   如果跳转之后 想返回之前  ctrl+alt+ <-  再回去 按 ctrl+alt+ ->
+     -->
+    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
+        <property name="url" value="${jdbc.url}" />
+        <property name="username" value="${jdbc.username}" />
+        <property name="password" value="${jdbc.password}" />
+        <property name="driverClassName" value="${jdbc.driver}" />
+    </bean>
+</beans>

+ 2 - 2
spring-demo/src/main/resources/book.properties

@@ -1,3 +1,3 @@
 javaSE=\u75AF\u72C2java\u8BB2\u4E49
 javaSE=\u75AF\u72C2java\u8BB2\u4E49
-  mysql=mysql\u5FC5\u77E5\u5FC5\u4F1A
-  JavaEE=\u6DF1\u5165\u5206\u6790JavaWeb\u6280\u672F\u5185\u5E55
+mysql=mysql\u5FC5\u77E5\u5FC5\u4F1A
+JavaEE=\u6DF1\u5165\u5206\u6790JavaWeb\u6280\u672F\u5185\u5E55

+ 4 - 0
spring-demo/src/main/resources/db.properties

@@ -0,0 +1,4 @@
+jdbc.url=jdbc:mysql://localhost:3306/novels?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
+jdbc.driver=com.mysql.cj.jdbc.Driver
+jdbc.username=root
+jdbc.password=root123456

+ 0 - 0
spring-demo/src/main/resources/bean-annotation.xml → spring-demo/src/main/resources/ioc/bean-annotation.xml


+ 3 - 3
spring-demo/src/main/resources/bean-auto.xml → spring-demo/src/main/resources/ioc/bean-auto.xml

@@ -12,7 +12,7 @@
 
 
     <!-- byName 代表Chair chair 不管类型 看属性名字 通过"chair"的字符串 去找bean的id有没有符合的
     <!-- byName 代表Chair chair 不管类型 看属性名字 通过"chair"的字符串 去找bean的id有没有符合的
     如果找不到 会赋值失败 或者说注入失败 -->
     如果找不到 会赋值失败 或者说注入失败 -->
-    <bean id="house" class="com.sf.auto.House" autowire="byName"></bean>
+    <bean id="house" class="com.sf.ioc.auto.House" autowire="byName"></bean>
 <!--    <bean id="chair" class="com.sf.auto.Chair">-->
 <!--    <bean id="chair" class="com.sf.auto.Chair">-->
 <!--        <property name="teacher" ref="teacher"></property>-->
 <!--        <property name="teacher" ref="teacher"></property>-->
 <!--    </bean>-->
 <!--    </bean>-->
@@ -21,8 +21,8 @@
     Could not autowire. There is more than one bean of 'Teacher' type.
     Could not autowire. There is more than one bean of 'Teacher' type.
     Beans: teacher1,teacher. Properties: 'teacher'
     Beans: teacher1,teacher. Properties: 'teacher'
     但如果没找到对应类型 不会报错 会为空-->
     但如果没找到对应类型 不会报错 会为空-->
-    <bean id="chair" class="com.sf.auto.Chair" autowire="byType"></bean>
+    <bean id="chair" class="com.sf.ioc.auto.Chair" autowire="byType"></bean>
 <!--    <bean id="chair1" class="com.sf.auto.Chair" autowire="byType"></bean>-->
 <!--    <bean id="chair1" class="com.sf.auto.Chair" autowire="byType"></bean>-->
-    <bean id="teacher" class="com.sf.auto.Teacher"></bean>
+    <bean id="teacher" class="com.sf.ioc.auto.Teacher"></bean>
 <!--    <bean id="teacher1" class="com.sf.auto.Teacher"></bean>-->
 <!--    <bean id="teacher1" class="com.sf.auto.Teacher"></bean>-->
 </beans>
 </beans>

+ 4 - 4
spring-demo/src/main/resources/bean-factory.xml → spring-demo/src/main/resources/ioc/bean-factory.xml

@@ -4,7 +4,7 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd">
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
 
-    <bean id="bmwCar" class="com.sf.factory.CarStaticFactory"
+    <bean id="bmwCar" class="com.sf.ioc.factory.CarStaticFactory"
           factory-method="getCar"> <constructor-arg value="3"></constructor-arg>
           factory-method="getCar"> <constructor-arg value="3"></constructor-arg>
     </bean>
     </bean>
 
 
@@ -20,14 +20,14 @@
             map.put(3, new Car(3, "BMW", 540000));
             map.put(3, new Car(3, "BMW", 540000));
         }
         }
     -->
     -->
-    <bean id="carFactory" class="com.sf.factory.CarInstanceFactory">
+    <bean id="carFactory" class="com.sf.ioc.factory.CarInstanceFactory">
         <property name="map">
         <property name="map">
             <map>
             <map>
                 <entry key="4">
                 <entry key="4">
 <!--                    <key><value>4</value></key>-->
 <!--                    <key><value>4</value></key>-->
                     <!-- 如果一个对象创建完 不需要被别的地方调用 可以没有名字 -->
                     <!-- 如果一个对象创建完 不需要被别的地方调用 可以没有名字 -->
                     <!-- 如果一个bean创建完 不需要被别的地方调用 可以没有id -->
                     <!-- 如果一个bean创建完 不需要被别的地方调用 可以没有id -->
-                    <bean class="com.sf.factory.Car">
+                    <bean class="com.sf.ioc.factory.Car">
                         <property name="id" value="4"></property>
                         <property name="id" value="4"></property>
                         <property name="name" value="Honda"></property>
                         <property name="name" value="Honda"></property>
                         <property name="price" value="300000"></property>
                         <property name="price" value="300000"></property>
@@ -35,7 +35,7 @@
                 </entry>
                 </entry>
 
 
                 <entry key="6">
                 <entry key="6">
-                    <bean class="com.sf.factory.Car">
+                    <bean class="com.sf.ioc.factory.Car">
                         <property name="id" value="6"></property>
                         <property name="id" value="6"></property>
                         <property name="name" value="ford"></property>
                         <property name="name" value="ford"></property>
                         <property name="price" value="500000"></property>
                         <property name="price" value="500000"></property>

+ 2 - 2
spring-demo/src/main/resources/bean-lifecycle.xml → spring-demo/src/main/resources/ioc/bean-lifecycle.xml

@@ -4,8 +4,8 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd">
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
 
-    <bean id="auth" class="com.sf.Auth" init-method="init" destroy-method="destroy">
+    <bean id="auth" class="com.sf.ioc.simple.Auth" init-method="init" destroy-method="destroy">
         <property name="name" value="CRUD"></property>
         <property name="name" value="CRUD"></property>
     </bean>
     </bean>
-    <bean id="myBeanPost" class="com.sf.lifecycle.MyBeanPost"></bean>
+    <bean id="myBeanPost" class="com.sf.ioc.lifecycle.MyBeanPost"></bean>
 </beans>
 </beans>

+ 6 - 6
spring-demo/src/main/resources/bean-list.xml → spring-demo/src/main/resources/ioc/bean-list.xml

@@ -5,7 +5,7 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
         https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
 
 
-    <bean id="house4" class="com.sf.list.House">
+    <bean id="house4" class="com.sf.ioc.list.House">
         <property name="addr" value="朗威大厦4层"></property>
         <property name="addr" value="朗威大厦4层"></property>
         <property name="chairList">
         <property name="chairList">
             <list>
             <list>
@@ -16,7 +16,7 @@
         </property>
         </property>
     </bean>
     </bean>
 
 
-    <bean id="house6" class="com.sf.list.House">
+    <bean id="house6" class="com.sf.ioc.list.House">
         <property name="addr" value="朗威大厦6层"></property>
         <property name="addr" value="朗威大厦6层"></property>
         <property name="chairList">
         <property name="chairList">
             <list>
             <list>
@@ -27,13 +27,13 @@
         </property>
         </property>
     </bean>
     </bean>
 
 
-    <bean id="chair1" class="com.sf.list.Chair">
+    <bean id="chair1" class="com.sf.ioc.list.Chair">
         <property name="num" value="1"></property>
         <property name="num" value="1"></property>
     </bean>
     </bean>
-    <bean id="chair2" class="com.sf.list.Chair">
+    <bean id="chair2" class="com.sf.ioc.list.Chair">
         <property name="num" value="2"></property>
         <property name="num" value="2"></property>
     </bean>
     </bean>
-    <bean id="chair3" class="com.sf.list.Chair">
+    <bean id="chair3" class="com.sf.ioc.list.Chair">
         <property name="num" value="3"></property>
         <property name="num" value="3"></property>
     </bean>
     </bean>
 
 
@@ -43,7 +43,7 @@
         <ref bean="chair2"></ref>
         <ref bean="chair2"></ref>
         <ref bean="chair3"></ref>
         <ref bean="chair3"></ref>
     </util:list>
     </util:list>
-    <bean id="house4_1" class="com.sf.list.House">
+    <bean id="house4_1" class="com.sf.ioc.list.House">
         <property name="addr" value="朗威大厦4层左手第一个教室"></property>
         <property name="addr" value="朗威大厦4层左手第一个教室"></property>
         <property name="chairList" ref="chairUtilList"></property>
         <property name="chairList" ref="chairUtilList"></property>
     </bean>
     </bean>

+ 1 - 1
spring-demo/src/main/resources/bean-other.xml → spring-demo/src/main/resources/ioc/bean-other.xml

@@ -5,7 +5,7 @@
         https://www.springframework.org/schema/beans/spring-beans.xsd">
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
 
 
 
-    <bean id="role" class="com.sf.Role">
+    <bean id="role" class="com.sf.ioc.simple.Role">
 <!--        <property name="roleName" value="admin"></property>-->
 <!--        <property name="roleName" value="admin"></property>-->
         <property name="roleName" value="admin"/>
         <property name="roleName" value="admin"/>
     </bean>
     </bean>

+ 2 - 2
spring-demo/src/main/resources/bean-prototype.xml → spring-demo/src/main/resources/ioc/bean-prototype.xml

@@ -5,12 +5,12 @@
         https://www.springframework.org/schema/beans/spring-beans.xsd">
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
 
     <!-- 通过scope(作用域) 设置为多例 -->
     <!-- 通过scope(作用域) 设置为多例 -->
-    <bean id="auth" class="com.sf.Auth" scope="prototype">
+    <bean id="auth" class="com.sf.ioc.simple.Auth" scope="prototype">
         <!-- 全部 CRUD  R-->
         <!-- 全部 CRUD  R-->
         <property name="name" value="R"></property>
         <property name="name" value="R"></property>
     </bean>
     </bean>
 
 
-    <bean id="role" class="com.sf.Role" scope="singleton">
+    <bean id="role" class="com.sf.ioc.simple.Role" scope="singleton">
         <property name="auth" ref="auth"></property>
         <property name="auth" ref="auth"></property>
     </bean>
     </bean>
 
 

+ 5 - 5
spring-demo/src/main/resources/bean.xml → spring-demo/src/main/resources/ioc/bean.xml

@@ -4,7 +4,7 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd">
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
 
-    <bean id="user" class="com.sf.User">
+    <bean id="user" class="com.sf.ioc.simple.User">
         <!-- 在bean标签下 有一个子标签 property 就是属性的意思 -->
         <!-- 在bean标签下 有一个子标签 property 就是属性的意思 -->
         <!--    property标签  自己的标签属性有 name 和 value  对应变量名和变量的值 -->
         <!--    property标签  自己的标签属性有 name 和 value  对应变量名和变量的值 -->
         <!--    本质上是调用属性的set方法  官网上叫做set注入-->
         <!--    本质上是调用属性的set方法  官网上叫做set注入-->
@@ -16,13 +16,13 @@
     </bean>
     </bean>
 
 
 
 
-    <bean id="user1" class="com.sf.User">
+    <bean id="user1" class="com.sf.ioc.simple.User">
         <constructor-arg name="name" value="lisi"></constructor-arg>
         <constructor-arg name="name" value="lisi"></constructor-arg>
         <constructor-arg name="desc" value="nothing"></constructor-arg>
         <constructor-arg name="desc" value="nothing"></constructor-arg>
         <constructor-arg name="role" ref="role"></constructor-arg>
         <constructor-arg name="role" ref="role"></constructor-arg>
     </bean>
     </bean>
 
 
-    <bean id="user2" class="com.sf.User">
+    <bean id="user2" class="com.sf.ioc.simple.User">
         <property name="name">
         <property name="name">
             <null/>
             <null/>
         </property>
         </property>
@@ -35,12 +35,12 @@
         </property>
         </property>
     </bean>
     </bean>
 
 
-    <bean id="role" class="com.sf.Role">
+    <bean id="role" class="com.sf.ioc.simple.Role">
         <!--        <property name="roleName" value="admin"></property>-->
         <!--        <property name="roleName" value="admin"></property>-->
         <property name="roleName" value="admin"/>
         <property name="roleName" value="admin"/>
     </bean>
     </bean>
 
 
-    <bean id="auth" class="com.sf.Auth">
+    <bean id="auth" class="com.sf.ioc.simple.Auth">
         <!--        <property name="roleName" value="admin"></property>-->
         <!--        <property name="roleName" value="admin"></property>-->
         <property name="name" value="增删改查"/>
         <property name="name" value="增删改查"/>
     </bean>
     </bean>

+ 0 - 11
spring-demo/src/test/java/com/sf/Test.java

@@ -1,11 +0,0 @@
-package com.sf;
-
-//import org.junit.jupiter.api.Test;
-
-public class Test {
-
-    @org.junit.jupiter.api.Test
-    public void test(){
-        System.out.println("hello");
-    }
-}

+ 23 - 0
spring-demo/src/test/java/com/sf/TestBook.java

@@ -0,0 +1,23 @@
+package com.sf;
+
+import com.sf.druid.SpringConfig;
+import com.sf.druid.dao.BookDao;
+import com.sf.druid.entity.Book;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import java.util.List;
+
+@SpringJUnitConfig(SpringConfig.class)
+public class TestBook {
+
+    @Autowired
+    private BookDao bookDao;
+
+    @Test
+    public void test() {
+        List<Book> books = bookDao.findAll();
+        System.out.println(books);
+    }
+}

+ 22 - 0
spring-demo/src/test/java/com/sf/TestDruid.java

@@ -0,0 +1,22 @@
+package com.sf;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class TestDruid {
+
+    @Test
+    public void test() {
+        try {
+            ApplicationContext context =
+                    new ClassPathXmlApplicationContext("bean-druid.xml");
+            DruidDataSource dataSource = context.getBean(DruidDataSource.class);
+            System.out.println(dataSource.getUrl());
+            System.out.println(dataSource.getDriverClassName());
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+    }
+}

+ 3 - 3
spring-demo/src/test/java/com/sf/TestAdvisor.java → spring-demo/src/test/java/com/sf/aop/TestAdvisor.java

@@ -1,6 +1,6 @@
-package com.sf;
+package com.sf.aop;
 
 
-import com.sf.aop.BaseService;
+import com.sf.aop.simple.BaseService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -9,7 +9,7 @@ public class TestAdvisor {
 
 
     @Test
     @Test
     public void test() {
     public void test() {
-        ApplicationContext factory = new ClassPathXmlApplicationContext("bean-advisor.xml");
+        ApplicationContext factory = new ClassPathXmlApplicationContext("aop/bean-advisor.xml");
         BaseService personProxy = (BaseService) factory.getBean("personProxy");
         BaseService personProxy = (BaseService) factory.getBean("personProxy");
         personProxy.eat();
         personProxy.eat();
         personProxy.wc();
         personProxy.wc();

+ 3 - 3
spring-demo/src/test/java/com/sf/TestAop.java → spring-demo/src/test/java/com/sf/aop/TestAop.java

@@ -1,6 +1,6 @@
-package com.sf;
+package com.sf.aop;
 
 
-import com.sf.aop.BaseService;
+import com.sf.aop.simple.BaseService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -9,7 +9,7 @@ public class TestAop {
 
 
     @Test
     @Test
     public void test() {
     public void test() {
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean-aop.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("aop/bean-aop.xml");
         BaseService personProxy = (BaseService) context.getBean("personProxy");
         BaseService personProxy = (BaseService) context.getBean("personProxy");
         personProxy.eat();
         personProxy.eat();
         personProxy.wc();
         personProxy.wc();

+ 19 - 0
spring-demo/src/test/java/com/sf/aop/TestPerformAnno.java

@@ -0,0 +1,19 @@
+package com.sf.aop;
+
+import com.sf.aop.performance.MyConfig;
+import com.sf.aop.performance.Performance;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+@SpringJUnitConfig(MyConfig.class)
+public class TestPerformAnno {
+
+    @Autowired
+    private Performance sleepNoMore;
+
+    @Test
+    public void test(){
+        sleepNoMore.perform();
+    }
+}

+ 29 - 0
spring-demo/src/test/java/com/sf/aop/TestPerformance.java

@@ -0,0 +1,29 @@
+package com.sf.aop;
+
+
+import com.sf.aop.performance.MyConfig;
+import com.sf.aop.performance.Performance;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class TestPerformance {
+
+    @Test
+    public void test(){
+        ApplicationContext context =
+                new ClassPathXmlApplicationContext("aop/bean-performance.xml");
+        Performance bean = context.getBean(Performance.class);
+        bean.perform();
+    }
+
+    @Test
+    public void testAnno() {
+        ApplicationContext context =
+                new AnnotationConfigApplicationContext(MyConfig.class);
+        Performance performance = context.getBean(Performance.class);
+        performance.perform();
+//        context.close();
+    }
+}

+ 3 - 3
spring-demo/src/test/java/com/sf/TestAuto.java → spring-demo/src/test/java/com/sf/ioc/TestAuto.java

@@ -1,6 +1,6 @@
-package com.sf;
+package com.sf.ioc;
 
 
-import com.sf.auto.House;
+import com.sf.ioc.auto.House;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -10,7 +10,7 @@ public class TestAuto {
     @Test
     @Test
     public void test() {
     public void test() {
         ApplicationContext context =
         ApplicationContext context =
-                new ClassPathXmlApplicationContext("bean-auto.xml");
+                new ClassPathXmlApplicationContext("ioc/bean-auto.xml");
         House house = context.getBean("house", House.class);
         House house = context.getBean("house", House.class);
         System.out.println(house);
         System.out.println(house);
     }
     }

+ 13 - 11
spring-demo/src/test/java/com/sf/TestBean.java → spring-demo/src/test/java/com/sf/ioc/TestBean.java

@@ -1,5 +1,7 @@
-package com.sf;
+package com.sf.ioc;
 
 
+import com.sf.ioc.simple.Role;
+import com.sf.ioc.simple.User;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -10,7 +12,7 @@ public class TestBean {
     public void test(){
     public void test(){
         // 要创建bean 需要使用spring提供的容器 (context 上下文)
         // 要创建bean 需要使用spring提供的容器 (context 上下文)
         // 应用容器 是个接口
         // 应用容器 是个接口
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean.xml");
         User user = (User) context.getBean("user");
         User user = (User) context.getBean("user");
         // 调用了无参构造器  如果有代码块 也会调用代码块
         // 调用了无参构造器  如果有代码块 也会调用代码块
         System.out.println(user);
         System.out.println(user);
@@ -21,7 +23,7 @@ public class TestBean {
 
 
     @Test
     @Test
     public void testOther(){
     public void testOther(){
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean-other.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean-other.xml");
         // Object getBean(String name) throws BeansException;
         // Object getBean(String name) throws BeansException;
         Role role = (Role)context.getBean("role");
         Role role = (Role)context.getBean("role");
         System.out.println(role);
         System.out.println(role);
@@ -29,7 +31,7 @@ public class TestBean {
 
 
     @Test
     @Test
     public void testBean(){
     public void testBean(){
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean-other.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean-other.xml");
         // 通过id获取对象
         // 通过id获取对象
         Role role0 = (Role)context.getBean("role");
         Role role0 = (Role)context.getBean("role");
         System.out.println(role0);
         System.out.println(role0);
@@ -76,7 +78,7 @@ public class TestBean {
 
 
     @Test
     @Test
     public void testAll(){
     public void testAll(){
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean.xml");
         Role role = context.getBean("role",Role.class);
         Role role = context.getBean("role",Role.class);
         System.out.println(role);
         System.out.println(role);
 //        User user = context.getBean("role",User.class);
 //        User user = context.getBean("role",User.class);
@@ -86,8 +88,8 @@ public class TestBean {
     @Test
     @Test
     public void testConst(){
     public void testConst(){
         // 这一行 可以一次性初始化所有配置的bean 直接创建出对象 存入容器中
         // 这一行 可以一次性初始化所有配置的bean 直接创建出对象 存入容器中
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
-        // 只是从容器中取出  id="user1" && class="com.sf.User"
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean.xml");
+        // 只是从容器中取出  id="user1" && class="com.sf.simple.User"
         // 这里因为配置了构造器参数  而不使用无参构造器 使用对应的有参构造器
         // 这里因为配置了构造器参数  而不使用无参构造器 使用对应的有参构造器
         User user1 = context.getBean("user1",User.class);
         User user1 = context.getBean("user1",User.class);
         System.out.println(user1);
         System.out.println(user1);
@@ -95,10 +97,10 @@ public class TestBean {
 
 
     @Test
     @Test
     public void testSpecial(){
     public void testSpecial(){
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean.xml");
         // 如果配置了属性值为null 会调用对应的set方法 赋值为null
         // 如果配置了属性值为null 会调用对应的set方法 赋值为null
         //   以避免对象在初始化时已经有值的情况
         //   以避免对象在初始化时已经有值的情况
-        User user = context.getBean("user2",User.class);
+        User user = context.getBean("user2", User.class);
         System.out.println(user);
         System.out.println(user);
 
 
 //        String str = "\"";
 //        String str = "\"";
@@ -106,7 +108,7 @@ public class TestBean {
 
 
     @Test
     @Test
     public void testRef(){
     public void testRef(){
-        // <bean id="user" class="com.sf.User">
+        // <bean id="user" class="com.sf.simple.User">
         //        <!-- 在bean标签下 有一个子标签 property 就是属性的意思 -->
         //        <!-- 在bean标签下 有一个子标签 property 就是属性的意思 -->
         //        <!--    property标签  自己的标签属性有 name 和 value  对应变量名和变量的值 -->
         //        <!--    property标签  自己的标签属性有 name 和 value  对应变量名和变量的值 -->
         //        <!--    本质上是调用属性的set方法  官网上叫做set注入-->
         //        <!--    本质上是调用属性的set方法  官网上叫做set注入-->
@@ -114,7 +116,7 @@ public class TestBean {
         //        <property name="desc" value="something"></property>
         //        <property name="desc" value="something"></property>
         //        <property name="role" ref="role"></property>
         //        <property name="role" ref="role"></property>
         //    </bean>
         //    </bean>
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean.xml");
         User user = context.getBean("user",User.class);
         User user = context.getBean("user",User.class);
         System.out.println(user);
         System.out.println(user);
         //  正常来讲 xml中的bean是按照先后顺序创建的
         //  正常来讲 xml中的bean是按照先后顺序创建的

+ 3 - 3
spring-demo/src/test/java/com/sf/TestBeanList.java → spring-demo/src/test/java/com/sf/ioc/TestBeanList.java

@@ -1,6 +1,6 @@
-package com.sf;
+package com.sf.ioc;
 
 
-import com.sf.list.House;
+import com.sf.ioc.list.House;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -9,7 +9,7 @@ public class TestBeanList {
 
 
     @Test
     @Test
     public void testList(){
     public void testList(){
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean-list.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean-list.xml");
         House house4 = context.getBean("house4", House.class);
         House house4 = context.getBean("house4", House.class);
         System.out.println(house4);
         System.out.println(house4);
 
 

+ 3 - 3
spring-demo/src/test/java/com/sf/TestConfig.java → spring-demo/src/test/java/com/sf/ioc/TestConfig.java

@@ -1,7 +1,7 @@
-package com.sf;
+package com.sf.ioc;
 
 
-import com.sf.annotation.House;
-import com.sf.config.SpringConfig;
+import com.sf.ioc.annotation.House;
+import com.sf.ioc.config.SpringConfig;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

+ 4 - 4
spring-demo/src/test/java/com/sf/TestFactory.java → spring-demo/src/test/java/com/sf/ioc/TestFactory.java

@@ -1,6 +1,6 @@
-package com.sf;
+package com.sf.ioc;
 
 
-import com.sf.factory.Car;
+import com.sf.ioc.factory.Car;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -10,7 +10,7 @@ public class TestFactory {
     @Test
     @Test
     public void testStatic() {
     public void testStatic() {
         ApplicationContext context =
         ApplicationContext context =
-                new ClassPathXmlApplicationContext("bean-factory.xml");
+                new ClassPathXmlApplicationContext("ioc/bean-factory.xml");
         Car bmwCar = (Car) context.getBean("bmwCar");
         Car bmwCar = (Car) context.getBean("bmwCar");
         System.out.println(bmwCar);
         System.out.println(bmwCar);
     }
     }
@@ -18,7 +18,7 @@ public class TestFactory {
     @Test
     @Test
     public void testInstance() {
     public void testInstance() {
         ApplicationContext context =
         ApplicationContext context =
-                new ClassPathXmlApplicationContext("bean-factory.xml");
+                new ClassPathXmlApplicationContext("ioc/bean-factory.xml");
         Car car4 = (Car) context.getBean("car4");
         Car car4 = (Car) context.getBean("car4");
         System.out.println(car4);
         System.out.println(car4);
     }
     }

+ 3 - 3
spring-demo/src/test/java/com/sf/TestPerson.java → spring-demo/src/test/java/com/sf/ioc/TestPerson.java

@@ -1,7 +1,7 @@
-package com.sf;
+package com.sf.ioc;
 
 
-import com.sf.config.condition.Person;
-import com.sf.config.condition.PersonConfig;
+import com.sf.ioc.config.condition.Person;
+import com.sf.ioc.config.condition.PersonConfig;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;

+ 3 - 5
spring-demo/src/test/java/com/sf/TestProperties.java → spring-demo/src/test/java/com/sf/ioc/TestProperties.java

@@ -1,12 +1,10 @@
-package com.sf;
+package com.sf.ioc;
 
 
-import com.sf.config.MyBean;
-import com.sf.config.PropertiesConfig;
+import com.sf.ioc.config.MyBean;
+import com.sf.ioc.config.PropertiesConfig;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.Profile;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
 
 

+ 6 - 3
spring-demo/src/test/java/com/sf/TestPrototype.java → spring-demo/src/test/java/com/sf/ioc/TestPrototype.java

@@ -1,5 +1,8 @@
-package com.sf;
+package com.sf.ioc;
 
 
+import com.sf.ioc.simple.Auth;
+import com.sf.ioc.simple.Role;
+import com.sf.ioc.simple.User;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -9,7 +12,7 @@ public class TestPrototype {
 
 
     @Test
     @Test
     public void test(){
     public void test(){
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean-prototype.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean-prototype.xml");
         Auth auth = context.getBean("auth", Auth.class);
         Auth auth = context.getBean("auth", Auth.class);
         Auth auth1 = context.getBean("auth", Auth.class);
         Auth auth1 = context.getBean("auth", Auth.class);
         System.out.println(auth == auth1);
         System.out.println(auth == auth1);
@@ -21,7 +24,7 @@ public class TestPrototype {
 
 
     @Test
     @Test
     public void testLife(){
     public void testLife(){
-        ApplicationContext context = new ClassPathXmlApplicationContext("bean-lifecycle.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/bean-lifecycle.xml");
         Auth auth = context.getBean("auth", Auth.class);
         Auth auth = context.getBean("auth", Auth.class);
         System.out.println(auth);
         System.out.println(auth);
         ((ClassPathXmlApplicationContext) context).close();
         ((ClassPathXmlApplicationContext) context).close();

+ 4 - 7
spring-demo/src/test/java/com/sf/TestSpring.java → spring-demo/src/test/java/com/sf/ioc/TestSpring.java

@@ -1,17 +1,14 @@
-package com.sf;
+package com.sf.ioc;
 
 
-import com.sf.annotation.Chair;
-import com.sf.annotation.House;
-import com.sf.annotation.Teacher;
-import com.sf.annotation.plane.Plane;
-import jakarta.annotation.Resource;
+import com.sf.ioc.annotation.House;
+import com.sf.ioc.annotation.plane.Plane;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
 
 
 // 根据配置的地址 找到spring容器要加载的xml文件
 // 根据配置的地址 找到spring容器要加载的xml文件
-@SpringJUnitConfig(locations = "classpath:bean-annotation.xml")
+@SpringJUnitConfig(locations = "classpath:ioc/bean-annotation.xml")
 public class TestSpring {
 public class TestSpring {
 
 
     // 从容器中取出House类型的对象
     // 从容器中取出House类型的对象

+ 1 - 1
spring-demo/src/test/java/com/sf/student/TestLSY.java

@@ -11,7 +11,7 @@ public class TestLSY {
 
 
     public static void testMethod() throws ClassNotFoundException {
     public static void testMethod() throws ClassNotFoundException {
         StringBuilder s = new StringBuilder();
         StringBuilder s = new StringBuilder();
-        Class userClass = Class.forName("com.sf.User");
+        Class userClass = Class.forName("com.sf.ioc.simple.User");
         Method[] declaredMethods = userClass.getDeclaredMethods();
         Method[] declaredMethods = userClass.getDeclaredMethods();
         for (Method m : declaredMethods) {
         for (Method m : declaredMethods) {
             s.append(Modifier.toString(m.getModifiers())
             s.append(Modifier.toString(m.getModifiers())

+ 1 - 1
spring-demo/src/test/java/com/sf/student/TestTang.java

@@ -11,7 +11,7 @@ import java.lang.reflect.Modifier;
 public class TestTang {
 public class TestTang {
     public static void main(String[] args) throws ClassNotFoundException {
     public static void main(String[] args) throws ClassNotFoundException {
         StringBuilder s = new StringBuilder();
         StringBuilder s = new StringBuilder();
-        Class userClass = Class.forName("com.sf.User");
+        Class userClass = Class.forName("com.sf.ioc.simple.User");
         String modifier = Modifier.toString(userClass.getModifiers());
         String modifier = Modifier.toString(userClass.getModifiers());
         System.out.println(modifier);
         System.out.println(modifier);
         String name = userClass.getName();
         String name = userClass.getName();

+ 1 - 1
spring-demo/src/test/java/com/sf/student/TestZFX.java

@@ -14,7 +14,7 @@ public class TestZFX {
      */
      */
     @Test
     @Test
     public void test01() throws Exception {
     public void test01() throws Exception {
-        Class<?> userClass = Class.forName("com.sf.User");
+        Class<?> userClass = Class.forName("com.sf.ioc.simple.User");
         StringBuilder s = new StringBuilder();
         StringBuilder s = new StringBuilder();
         /*获取到第一行*/
         /*获取到第一行*/
         s.append(Modifier.toString(userClass.getModifiers()) + " class " +
         s.append(Modifier.toString(userClass.getModifiers()) + " class " +