Browse Source

spring中的ioc高级

guyanqing 1 year ago
parent
commit
71bc8414bc
35 changed files with 635 additions and 46 deletions
  1. 46 43
      04maven/spring/.idea/workspace.xml
  2. 13 0
      04maven/spring/pom.xml
  3. 3 1
      04maven/spring/src/main/java/com/sf/entity/Order.java
  4. 36 0
      04maven/spring/src/main/java/com/sf/entity/Student.java
  5. 21 0
      04maven/spring/src/main/java/com/sf/entity/User.java
  6. 53 0
      04maven/spring/src/main/java/com/sf/entity/User2.java
  7. 58 0
      04maven/spring/src/main/java/com/sf/factory/FactoryUser.java
  8. 25 0
      04maven/spring/src/main/java/com/sf/factory/InstanceFactory.java
  9. 39 0
      04maven/spring/src/main/java/com/sf/factory/StaticFactory.java
  10. 25 0
      04maven/spring/src/main/java/com/sf/processor/ABeanPostProcessor.java
  11. 6 1
      04maven/spring/src/main/resources/bean.xml
  12. 27 0
      04maven/spring/src/main/resources/bean5.xml
  13. 21 0
      04maven/spring/src/main/resources/bean6.xml
  14. 23 0
      04maven/spring/src/main/resources/bean7.xml
  15. 3 0
      04maven/spring/src/main/resources/db.properties
  16. 51 0
      04maven/spring/src/test/java/com/sf/AppTest2.java
  17. 66 0
      04maven/spring/src/test/java/com/sf/AppTest3.java
  18. 39 0
      04maven/spring/src/test/java/com/sf/AppTest4.java
  19. 6 1
      04maven/spring/target/classes/bean.xml
  20. 27 0
      04maven/spring/target/classes/bean5.xml
  21. 21 0
      04maven/spring/target/classes/bean6.xml
  22. 23 0
      04maven/spring/target/classes/bean7.xml
  23. BIN
      04maven/spring/target/classes/com/sf/entity/Order.class
  24. BIN
      04maven/spring/target/classes/com/sf/entity/Student.class
  25. BIN
      04maven/spring/target/classes/com/sf/entity/User.class
  26. BIN
      04maven/spring/target/classes/com/sf/entity/User2.class
  27. BIN
      04maven/spring/target/classes/com/sf/factory/FactoryUser.class
  28. BIN
      04maven/spring/target/classes/com/sf/factory/InstanceFactory.class
  29. BIN
      04maven/spring/target/classes/com/sf/factory/StaticFactory.class
  30. BIN
      04maven/spring/target/classes/com/sf/processor/ABeanPostProcessor.class
  31. 3 0
      04maven/spring/target/classes/db.properties
  32. BIN
      04maven/spring/target/test-classes/com/sf/AppTest.class
  33. BIN
      04maven/spring/target/test-classes/com/sf/AppTest2.class
  34. BIN
      04maven/spring/target/test-classes/com/sf/AppTest3.class
  35. BIN
      04maven/spring/target/test-classes/com/sf/AppTest4.class

+ 46 - 43
04maven/spring/.idea/workspace.xml

@@ -5,26 +5,28 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="8c3e0ed0-6141-4ee9-a284-3fa2d43ee5eb" name="Changes" comment="">
-      <change afterPath="$PROJECT_DIR$/.idea/.gitignore" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/jarRepositories.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/controller/UserController.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/dao/UserDao.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/entity/Order.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/entity/User.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/service/UserService.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/resources/bean.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/resources/bean2.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/resources/bean3.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/resources/bean4.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/test/java/com/sf/AppTest.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../mybatis/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../mybatis/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../mybatis/src/main/java/com/sf/dto/JsonArrayTypeHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/../mybatis/src/main/java/com/sf/dto/JsonArrayTypeHandler.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/entity/Student.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/entity/User2.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/factory/FactoryUser.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/factory/InstanceFactory.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/factory/StaticFactory.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/processor/ABeanPostProcessor.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/bean5.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/bean6.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/bean7.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/db.properties" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/java/com/sf/AppTest2.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/java/com/sf/AppTest3.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/java/com/sf/AppTest4.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/entity/Order.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/entity/Order.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/entity/User.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/entity/User.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/bean.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/bean.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/target/classes/bean.xml" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/bean.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/target/classes/com/sf/entity/Order.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/sf/entity/Order.class" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/target/classes/com/sf/entity/User.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/sf/entity/User.class" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/target/test-classes/com/sf/AppTest.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/test-classes/com/sf/AppTest.class" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -34,8 +36,8 @@
   <component name="FileTemplateManagerImpl">
     <option name="RECENT_TEMPLATES">
       <list>
-        <option value="Class" />
         <option value="spring-beans.schema" />
+        <option value="Class" />
       </list>
     </option>
   </component>
@@ -65,11 +67,12 @@
     "project.structure.last.edited": "Modules",
     "project.structure.proportion": "0.15",
     "project.structure.side.proportion": "0.13333334",
+    "settings.editor.selected.configurable": "preferences.fileTypes",
     "vue.rearranger.settings.migration": "true"
   }
 }]]></component>
-  <component name="RunManager" selected="JUnit.AppTest.t6">
-    <configuration name="AppTest.t2" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+  <component name="RunManager" selected="JUnit.AppTest4.t1">
+    <configuration name="AppTest3.t1" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="spring" />
       <extension name="coverage">
         <pattern>
@@ -78,14 +81,14 @@
         </pattern>
       </extension>
       <option name="PACKAGE_NAME" value="com.sf" />
-      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest" />
-      <option name="METHOD_NAME" value="t2" />
+      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest3" />
+      <option name="METHOD_NAME" value="t1" />
       <option name="TEST_OBJECT" value="method" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="AppTest.t4" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+    <configuration name="AppTest3.t2" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="spring" />
       <extension name="coverage">
         <pattern>
@@ -94,14 +97,14 @@
         </pattern>
       </extension>
       <option name="PACKAGE_NAME" value="com.sf" />
-      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest" />
-      <option name="METHOD_NAME" value="t4" />
+      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest3" />
+      <option name="METHOD_NAME" value="t2" />
       <option name="TEST_OBJECT" value="method" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="AppTest.t5" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+    <configuration name="AppTest3.t3" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="spring" />
       <extension name="coverage">
         <pattern>
@@ -110,14 +113,14 @@
         </pattern>
       </extension>
       <option name="PACKAGE_NAME" value="com.sf" />
-      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest" />
-      <option name="METHOD_NAME" value="t5" />
+      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest3" />
+      <option name="METHOD_NAME" value="t3" />
       <option name="TEST_OBJECT" value="method" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="AppTest.t6" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+    <configuration name="AppTest3.t4" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="spring" />
       <extension name="coverage">
         <pattern>
@@ -126,14 +129,14 @@
         </pattern>
       </extension>
       <option name="PACKAGE_NAME" value="com.sf" />
-      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest" />
-      <option name="METHOD_NAME" value="t6" />
+      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest3" />
+      <option name="METHOD_NAME" value="t4" />
       <option name="TEST_OBJECT" value="method" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="AppTest.tp" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+    <configuration name="AppTest4.t1" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="spring" />
       <extension name="coverage">
         <pattern>
@@ -142,8 +145,8 @@
         </pattern>
       </extension>
       <option name="PACKAGE_NAME" value="com.sf" />
-      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest" />
-      <option name="METHOD_NAME" value="tp" />
+      <option name="MAIN_CLASS_NAME" value="com.sf.AppTest4" />
+      <option name="METHOD_NAME" value="t1" />
       <option name="TEST_OBJECT" value="method" />
       <method v="2">
         <option name="Make" enabled="true" />
@@ -151,11 +154,11 @@
     </configuration>
     <recent_temporary>
       <list>
-        <item itemvalue="JUnit.AppTest.t6" />
-        <item itemvalue="JUnit.AppTest.t5" />
-        <item itemvalue="JUnit.AppTest.t4" />
-        <item itemvalue="JUnit.AppTest.t2" />
-        <item itemvalue="JUnit.AppTest.tp" />
+        <item itemvalue="JUnit.AppTest4.t1" />
+        <item itemvalue="JUnit.AppTest3.t4" />
+        <item itemvalue="JUnit.AppTest3.t3" />
+        <item itemvalue="JUnit.AppTest3.t2" />
+        <item itemvalue="JUnit.AppTest3.t1" />
       </list>
     </recent_temporary>
   </component>
@@ -167,7 +170,7 @@
       <option name="number" value="Default" />
       <option name="presentableId" value="Default" />
       <updated>1689993904831</updated>
-      <workItem from="1689993906819" duration="13124000" />
+      <workItem from="1689993906819" duration="38359000" />
     </task>
     <servers />
   </component>

+ 13 - 0
04maven/spring/pom.xml

@@ -32,6 +32,19 @@
       <artifactId>spring-context</artifactId>
       <version>4.3.27.RELEASE</version>
     </dependency>
+
+    <!-- 数据库连接 -->
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <version>5.1.49</version>
+    </dependency>
+    <!-- druid连接池 -->
+    <dependency>
+      <groupId>com.alibaba</groupId>
+      <artifactId>druid</artifactId>
+      <version>1.1.10</version>
+    </dependency>
   </dependencies>
 
 

+ 3 - 1
04maven/spring/src/main/java/com/sf/entity/Order.java

@@ -1,7 +1,9 @@
 package com.sf.entity;
 
+import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
-
+@Component
+@Scope(value = "prototype")
 public class Order {
 
     private Integer orderId;

+ 36 - 0
04maven/spring/src/main/java/com/sf/entity/Student.java

@@ -0,0 +1,36 @@
+package com.sf.entity;
+
+import org.springframework.context.annotation.Scope;
+
+/**
+ * student的实体类
+ */
+public class Student extends User{
+
+    /**
+     * 性别
+     */
+    private String gender;
+
+    public Student() {
+    }
+
+    public Student(String gender) {
+        this.gender = gender;
+    }
+
+    public String getGender() {
+        return gender;
+    }
+
+    public void setGender(String gender) {
+        this.gender = gender;
+    }
+
+    @Override
+    public String toString() {
+        return "Student{" +
+                "gender='" + gender + '\'' +
+                '}';
+    }
+}

+ 21 - 0
04maven/spring/src/main/java/com/sf/entity/User.java

@@ -35,6 +35,11 @@ public class User {
         return orderMap;
     }
 
+    public User(Integer userId, String userName) {
+        this.userId = userId;
+        this.userName = userName;
+    }
+
     public User(Integer userId, String userName, Integer age, List<Order> orders, Set<Order> orderSet, Map<String, Order> orderMap) {
         this.userId = userId;
         this.userName = userName;
@@ -117,4 +122,20 @@ public class User {
         this.orderSet = orderSet;
     }
 
+
+    /**
+     * 初始化方法
+     */
+    public void init(){
+        //todo  写业务罗代码
+        System.out.println("我被初始化了...");
+    }
+
+    /**
+     * 销毁方法
+     */
+    public void destroy(){
+        System.out.println("我被销毁了...");
+    }
+
 }

+ 53 - 0
04maven/spring/src/main/java/com/sf/entity/User2.java

@@ -0,0 +1,53 @@
+package com.sf.entity;
+
+public class User2 {
+    private Integer userId;
+    private String userName;
+
+    public User2() {
+    }
+
+    public User2(Integer userId, String userName) {
+        this.userId = userId;
+        this.userName = userName;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    @Override
+    public String toString() {
+        return "User2{" +
+                "userId=" + userId +
+                ", userName='" + userName + '\'' +
+                '}';
+    }
+
+    /**
+     * 初始化方法
+     */
+    public void init(){
+        //todo  写业务罗代码
+        System.out.println("我被初始化了...");
+    }
+
+    /**
+     * 销毁方法
+     */
+    public void destroy(){
+        System.out.println("我被销毁了...");
+    }
+}

+ 58 - 0
04maven/spring/src/main/java/com/sf/factory/FactoryUser.java

@@ -0,0 +1,58 @@
+package com.sf.factory;
+
+import com.sf.entity.User;
+import org.springframework.beans.factory.FactoryBean;
+
+/**
+ * user的工厂类
+ */
+public class FactoryUser implements FactoryBean<User> {
+
+    private String name;
+
+
+//    public FactoryUser(String name) {
+//        this.name = name;
+//    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * getObject
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public User getObject() throws Exception {
+        User user = new User();
+        user.setUserId(1001);
+        user.setUserName("我是user的工厂类...");
+        return user;
+    }
+
+    /**
+     * 获取user工厂类方法发返回值类型
+     * @return
+     */
+    @Override
+    public Class<?> getObjectType() {
+        return User.class;
+    }
+
+    /**
+     * 是否为单例模式
+     * 单例:单个实例
+     * 多例:多个实例
+     * @return
+     */
+    @Override
+    public boolean isSingleton() {
+        return true;
+    }
+}

+ 25 - 0
04maven/spring/src/main/java/com/sf/factory/InstanceFactory.java

@@ -0,0 +1,25 @@
+package com.sf.factory;
+
+import com.sf.entity.User;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class InstanceFactory {
+    private Map<String, User> map;
+    {
+        map  = new HashMap<>();
+        map.put("key01",new User(1001,"user01",11));
+        map.put("key02",new User(1002,"user02",12));
+        map.put("key03",new User(1003,"user03",13));
+    }
+
+    /**
+     * 获取user对象的方法
+     * @return
+     */
+    public User getUser(String key){
+        User user = map.get(key);
+        return user;
+    }
+}

+ 39 - 0
04maven/spring/src/main/java/com/sf/factory/StaticFactory.java

@@ -0,0 +1,39 @@
+package com.sf.factory;
+
+import com.sf.entity.User;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 静态工厂类
+ */
+public class StaticFactory {
+    private static Map<String, User> map;
+
+    /**
+     * 静态代码块  static {
+     *
+     *     }
+     *     代码块  {}
+     *
+     *     静态先行
+     */
+    static {
+       map  = new HashMap<>();
+       map.put("key01",new User(1001,"user01",11));
+       map.put("key02",new User(1002,"user02",12));
+       map.put("key03",new User(1003,"user03",13));
+    }
+
+    /**
+     * 获取用户的方法
+     */
+
+    public static User getUser(String key){
+        User user = map.get(key);
+        return user;
+    }
+
+
+}

+ 25 - 0
04maven/spring/src/main/java/com/sf/processor/ABeanPostProcessor.java

@@ -0,0 +1,25 @@
+package com.sf.processor;
+
+import com.sf.entity.User;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+
+/**
+ * bean的后置处理器
+ */
+public class ABeanPostProcessor implements BeanPostProcessor {
+    public ABeanPostProcessor() {
+    }
+
+    @Override
+    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+        System.out.println("bean=========>"+bean);
+        return bean;
+    }
+
+    @Override
+    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+        System.out.println("postProcessAfterInitialization=================>"+beanName);
+        return bean;
+    }
+}

+ 6 - 1
04maven/spring/src/main/resources/bean.xml

@@ -1,6 +1,7 @@
 <?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 http://www.springframework.org/schema/beans/spring-beans.xsd
 		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
 
@@ -10,11 +11,15 @@
  class:要进行初始化对象的全类名
  <property>  : 对对象中的属性进行赋值   name:对应对象中的属性   value:给属性进行赋值
 -->
-    <bean id="user" class="com.sf.entity.User">
+<!--    <context:component-scan base-package="com"></context:component-scan>-->
+
+    <bean id="user" class="com.sf.entity.User" init-method="init" destroy-method="destroy">
         <property name="userId" value="1001"></property>
         <property name="userName" value="admin"></property>
         <property name="age" value="18"></property>
     </bean>
+    <!--    实例化后置处理器ABeanPostProcessor-->
+    <bean id="aBeanPostProcessor" class="com.sf.processor.ABeanPostProcessor"></bean>
 
 
 <!--    构造器赋值-->

+ 27 - 0
04maven/spring/src/main/resources/bean5.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+<!--静态工厂-->
+    <bean id="staticFactory" class="com.sf.factory.StaticFactory" factory-method="getUser">
+       <constructor-arg value="key01"></constructor-arg>
+    </bean>
+
+<!--    实例工厂-->
+<!-- 实例化 InstanceFactory  -->
+    <bean id="instanceFactory" class="com.sf.factory.InstanceFactory"></bean>
+
+    <bean id="user" factory-bean="instanceFactory" factory-method="getUser">
+<!--        <constructor-arg value="acv"></constructor-arg>-->
+        <constructor-arg value=""/>
+    </bean>
+
+
+<!--    user的工厂类-->
+    <bean id="factoryUser" class="com.sf.factory.FactoryUser">
+<!--        <constructor-arg value="韩梅梅"></constructor-arg>-->
+    </bean>
+
+
+</beans>

+ 21 - 0
04maven/spring/src/main/resources/bean6.xml

@@ -0,0 +1,21 @@
+<?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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
+
+<!--    扫描的包-->
+    <context:component-scan base-package="com"></context:component-scan>
+<!--实例化user-->
+    <bean id="user1" class="com.sf.entity.User">
+        <property name="userId" value="1001"></property>
+        <property name="userName" value="admin"></property>
+        <property name="age" value="18"></property>
+    </bean>
+<!--    实例化student-->
+    <bean id="student" parent="user1" class="com.sf.entity.Student" scope="prototype">
+        <property name="gender" value="男"></property>
+    </bean>
+
+
+</beans>

+ 23 - 0
04maven/spring/src/main/resources/bean7.xml

@@ -0,0 +1,23 @@
+<?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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
+
+    <bean id="user2" class="com.sf.entity.User2" init-method="init" destroy-method="destroy">
+        <property name="userId" value="1001"></property>
+        <property name="userName" value="admin"></property>
+    </bean>
+    <!--    实例化后置处理器ABeanPostProcessor-->
+    <bean id="aBeanPostProcessor" class="com.sf.processor.ABeanPostProcessor"></bean>
+
+
+<!--    外部资源导入-->
+    <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
+
+    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
+        <property name="username" value="${jdbc_user}"></property>
+        <property name="password" value="${jdbc_password}"></property>
+        <property name="url" value="${jdbc_url}"></property>
+    </bean>
+</beans>

+ 3 - 0
04maven/spring/src/main/resources/db.properties

@@ -0,0 +1,3 @@
+jdbc_user=root
+jdbc_password=root
+jdbc_url=jdbc:mysql://127.0.0.1:3306/mybatis2

+ 51 - 0
04maven/spring/src/test/java/com/sf/AppTest2.java

@@ -0,0 +1,51 @@
+package com.sf;
+
+import com.sf.entity.User;
+import com.sf.factory.FactoryUser;
+import com.sf.factory.InstanceFactory;
+import com.sf.factory.StaticFactory;
+import org.junit.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class AppTest2 {
+    /**
+     * 静态工厂的测试
+     */
+    @Test
+    public void t1(){
+        ApplicationContext ioc = new ClassPathXmlApplicationContext("bean5.xml");
+        Object staticFactory = ioc.getBean("staticFactory");
+        User user = StaticFactory.getUser("key02");
+        System.out.println(user);
+    }
+
+    /**
+     * 实例工厂的测试
+     */
+    @Test
+    public void t2(){
+        ApplicationContext ioc = new ClassPathXmlApplicationContext("bean5.xml");
+                   //instanceFactory                             //User
+//        InstanceFactory instanceFactory = (InstanceFactory) ioc.getBean("user");
+        InstanceFactory instanceFactory = ioc.getBean(InstanceFactory.class);
+        User user = instanceFactory.getUser("key02");
+        System.out.println(user);
+    }
+
+    /**
+     * 测试user的工厂类
+     */
+    @Test
+    public void t3(){
+        ApplicationContext ioc = new ClassPathXmlApplicationContext("bean5.xml");
+        FactoryUser factoryUser1 = ioc.getBean(FactoryUser.class);  //相当于普通bean
+        Object factoryUser2 = ioc.getBean("factoryUser");  //走的是FactoryUser中的getObject();
+        System.out.println(factoryUser1);
+        System.out.println(factoryUser2);
+    }
+
+
+
+
+}

+ 66 - 0
04maven/spring/src/test/java/com/sf/AppTest3.java

@@ -0,0 +1,66 @@
+package com.sf;
+
+import com.sf.entity.Order;
+import com.sf.entity.Student;
+import org.junit.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class AppTest3 {
+    @Test
+    public void t1(){
+        ConfigurableApplicationContext ioc = new ClassPathXmlApplicationContext("bean6.xml");
+        Object object = ioc.getBean("student");
+        Student student = new Student();
+        if(object instanceof Student){
+//            强转
+            student = (Student) object;
+        }else {
+            System.out.println("转换异常");
+        }
+        System.out.println(student.getUserName());
+    }
+
+
+    /**
+     * 测试bean的单例和多例-基于xml
+     */
+    @Test
+    public void t2(){
+        ConfigurableApplicationContext ioc = new ClassPathXmlApplicationContext("bean6.xml");
+        Student student1 = ioc.getBean(Student.class);
+        Student student2 = ioc.getBean(Student.class);
+        if(student1.hashCode() == student2.hashCode()){
+            System.out.println(student1.hashCode() == student2.hashCode());
+            System.out.println("单例");
+        }else {
+            System.out.println(student1.hashCode() == student2.hashCode());
+            System.out.println("多例");
+        }
+    }
+
+
+    /**
+     * 测试bean的单例和多例-基于注解
+     */
+    @Test
+    public void t3(){
+        ConfigurableApplicationContext ioc = new ClassPathXmlApplicationContext("bean6.xml");
+        Order order1 = ioc.getBean(Order.class);
+        Order order2 = ioc.getBean(Order.class);
+        System.out.println(order1 == order2);
+    }
+
+    /**
+     * 测试bean的生命周期
+     */
+    @Test
+    public void t4(){
+        ConfigurableApplicationContext ioc = new ClassPathXmlApplicationContext("bean.xml");
+        Object user = ioc.getBean("user");
+        System.out.println(user);
+//        关闭ioc容器
+//        ioc.close();
+    }
+}

+ 39 - 0
04maven/spring/src/test/java/com/sf/AppTest4.java

@@ -0,0 +1,39 @@
+package com.sf;
+
+import org.junit.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/**
+ * 测试数据库
+ */
+public class AppTest4 {
+
+    @Test
+    public void t1() throws SQLException {
+        /**
+         * jdbc操作数据库的步骤
+         * 1.获取数据库的连接
+         * 2.创建statement对象
+         * 3.string sql = ”“
+         * 4.通过statement发送sql
+         */
+        ApplicationContext ioc = new ClassPathXmlApplicationContext("bean7.xml");
+        DataSource dataSource = (DataSource) ioc.getBean("dataSource");
+        System.out.println(dataSource);
+        Connection connection = dataSource.getConnection();
+        Statement statement = connection.createStatement();
+        String sql = "select * from user where user_id =1001";
+        ResultSet resultSet = statement.executeQuery(sql);
+        if(resultSet.next()){
+            String user_name = resultSet.getString("user_name");
+            System.out.println(user_name);
+        }
+    }
+}

+ 6 - 1
04maven/spring/target/classes/bean.xml

@@ -1,6 +1,7 @@
 <?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 http://www.springframework.org/schema/beans/spring-beans.xsd
 		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
 
@@ -10,11 +11,15 @@
  class:要进行初始化对象的全类名
  <property>  : 对对象中的属性进行赋值   name:对应对象中的属性   value:给属性进行赋值
 -->
-    <bean id="user" class="com.sf.entity.User">
+<!--    <context:component-scan base-package="com"></context:component-scan>-->
+
+    <bean id="user" class="com.sf.entity.User" init-method="init" destroy-method="destroy">
         <property name="userId" value="1001"></property>
         <property name="userName" value="admin"></property>
         <property name="age" value="18"></property>
     </bean>
+    <!--    实例化后置处理器ABeanPostProcessor-->
+    <bean id="aBeanPostProcessor" class="com.sf.processor.ABeanPostProcessor"></bean>
 
 
 <!--    构造器赋值-->

+ 27 - 0
04maven/spring/target/classes/bean5.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+<!--静态工厂-->
+    <bean id="staticFactory" class="com.sf.factory.StaticFactory" factory-method="getUser">
+       <constructor-arg value="key01"></constructor-arg>
+    </bean>
+
+<!--    实例工厂-->
+<!-- 实例化 InstanceFactory  -->
+    <bean id="instanceFactory" class="com.sf.factory.InstanceFactory"></bean>
+
+    <bean id="user" factory-bean="instanceFactory" factory-method="getUser">
+<!--        <constructor-arg value="acv"></constructor-arg>-->
+        <constructor-arg value=""/>
+    </bean>
+
+
+<!--    user的工厂类-->
+    <bean id="factoryUser" class="com.sf.factory.FactoryUser">
+<!--        <constructor-arg value="韩梅梅"></constructor-arg>-->
+    </bean>
+
+
+</beans>

+ 21 - 0
04maven/spring/target/classes/bean6.xml

@@ -0,0 +1,21 @@
+<?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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
+
+<!--    扫描的包-->
+    <context:component-scan base-package="com"></context:component-scan>
+<!--实例化user-->
+    <bean id="user1" class="com.sf.entity.User">
+        <property name="userId" value="1001"></property>
+        <property name="userName" value="admin"></property>
+        <property name="age" value="18"></property>
+    </bean>
+<!--    实例化student-->
+    <bean id="student" parent="user1" class="com.sf.entity.Student" scope="prototype">
+        <property name="gender" value="男"></property>
+    </bean>
+
+
+</beans>

+ 23 - 0
04maven/spring/target/classes/bean7.xml

@@ -0,0 +1,23 @@
+<?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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
+
+    <bean id="user2" class="com.sf.entity.User2" init-method="init" destroy-method="destroy">
+        <property name="userId" value="1001"></property>
+        <property name="userName" value="admin"></property>
+    </bean>
+    <!--    实例化后置处理器ABeanPostProcessor-->
+    <bean id="aBeanPostProcessor" class="com.sf.processor.ABeanPostProcessor"></bean>
+
+
+<!--    外部资源导入-->
+    <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
+
+    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
+        <property name="username" value="${jdbc_user}"></property>
+        <property name="password" value="${jdbc_password}"></property>
+        <property name="url" value="${jdbc_url}"></property>
+    </bean>
+</beans>

BIN
04maven/spring/target/classes/com/sf/entity/Order.class


BIN
04maven/spring/target/classes/com/sf/entity/Student.class


BIN
04maven/spring/target/classes/com/sf/entity/User.class


BIN
04maven/spring/target/classes/com/sf/entity/User2.class


BIN
04maven/spring/target/classes/com/sf/factory/FactoryUser.class


BIN
04maven/spring/target/classes/com/sf/factory/InstanceFactory.class


BIN
04maven/spring/target/classes/com/sf/factory/StaticFactory.class


BIN
04maven/spring/target/classes/com/sf/processor/ABeanPostProcessor.class


+ 3 - 0
04maven/spring/target/classes/db.properties

@@ -0,0 +1,3 @@
+jdbc_user=root
+jdbc_password=root
+jdbc_url=jdbc:mysql://127.0.0.1:3306/mybatis2

BIN
04maven/spring/target/test-classes/com/sf/AppTest.class


BIN
04maven/spring/target/test-classes/com/sf/AppTest2.class


BIN
04maven/spring/target/test-classes/com/sf/AppTest3.class


BIN
04maven/spring/target/test-classes/com/sf/AppTest4.class