Procházet zdrojové kódy

0420 spring lifecycle

Qing před 1 rokem
rodič
revize
a177c73385

+ 24 - 24
spring-demo/.idea/workspace.xml

@@ -4,28 +4,18 @@
     <option name="autoReloadType" value="SELECTIVE" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="5aa6272e-23b4-48f4-9aaa-8caf45810aa0" name="Changes" comment="0413 spring">
-      <change afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/google-java-format.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/Auth.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/self/BeanDefined.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/self/BeanFactory.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/self/Test.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/self/TestString.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton1.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton2.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton3.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton4.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/singleton/TestSingleton.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/resources/spring-singleton.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/test/java/com/sf/TestSingleton.java" afterDir="false" />
+    <list default="true" id="5aa6272e-23b4-48f4-9aaa-8caf45810aa0" name="Changes" comment="0417 spring">
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/lifecycle/MyBeanPost.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/Role.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/Role.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/Auth.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/Auth.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/User.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/User.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton1.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton1.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton2.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton2.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton3.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/singleton/Singleton3.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/main/resources/spring-beans-new.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/spring-beans-new.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/test/java/com/sf/TestUser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/java/com/sf/TestUser.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/spring-beans.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/spring-beans.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/spring-singleton.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/spring-singleton.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/test/java/com/sf/TestSingleton.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/java/com/sf/TestSingleton.java" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -94,7 +84,7 @@
     "project.structure.last.edited": "Project",
     "project.structure.proportion": "0.1809181",
     "project.structure.side.proportion": "0.22295515",
-    "settings.editor.selected.configurable": "fileTemplates",
+    "settings.editor.selected.configurable": "MavenSettings",
     "vue.rearranger.settings.migration": "true"
   }
 }]]></component>
@@ -214,7 +204,8 @@
       <workItem from="1712732632988" duration="8215000" />
       <workItem from="1712972174804" duration="14892000" />
       <workItem from="1713086100573" duration="122000" />
-      <workItem from="1713332000735" duration="11126000" />
+      <workItem from="1713332000735" duration="13027000" />
+      <workItem from="1713574818502" duration="3271000" />
     </task>
     <task id="LOCAL-00001" summary="0403 javaSE">
       <option name="closed" value="true" />
@@ -248,7 +239,15 @@
       <option name="project" value="LOCAL" />
       <updated>1712998863701</updated>
     </task>
-    <option name="localTasksCounter" value="5" />
+    <task id="LOCAL-00005" summary="0417 spring">
+      <option name="closed" value="true" />
+      <created>1713344510906</created>
+      <option name="number" value="00005" />
+      <option name="presentableId" value="LOCAL-00005" />
+      <option name="project" value="LOCAL" />
+      <updated>1713344510906</updated>
+    </task>
+    <option name="localTasksCounter" value="6" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -351,7 +350,8 @@
     <MESSAGE value="0403 javaSE" />
     <MESSAGE value="0410 reflect" />
     <MESSAGE value="0413 spring" />
-    <option name="LAST_COMMIT_MESSAGE" value="0413 spring" />
+    <MESSAGE value="0417 spring" />
+    <option name="LAST_COMMIT_MESSAGE" value="0417 spring" />
   </component>
   <component name="XSLT-Support.FileAssociations.UIState">
     <expand />

+ 3 - 0
spring-demo/src/main/java/com/sf/Auth.java

@@ -1,5 +1,8 @@
 package com.sf;
 
+/**
+ * 权限类
+ */
 public class Auth {
 
     private String name;

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

@@ -5,11 +5,11 @@ public class User {
     // user.setName();
     private String name;
 
-    private Role role;
-
     // 描述信息
     private String desc;
 
+    private Role role;
+
     // 当没有声明构造器时  会提供一个默认的无参构造器
     // 当声明了某一构造器  会去掉默认提供的无参构造器
     public User() {

+ 26 - 0
spring-demo/src/main/java/com/sf/lifecycle/MyBeanPost.java

@@ -0,0 +1,26 @@
+package com.sf.lifecycle;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+
+/**
+ * BeanPostProcessor 是bean的后置处理器
+ */
+public class MyBeanPost implements BeanPostProcessor {
+
+    // ctrl + N 快捷键生成
+    // 重写方法 Override Methods
+    @Override
+    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+        System.out.println("bean后置处理器 (初始化之前)" + beanName);
+//        System.out.println(beanName + "\t" + bean);
+        return bean;
+    }
+
+    @Override
+    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+        System.out.println("bean后置处理器 (初始化之后)" + beanName);
+//        System.out.println(beanName + "\t" + bean);
+        return bean;
+    }
+}

+ 4 - 3
spring-demo/src/main/java/com/sf/singleton/Singleton1.java

@@ -12,14 +12,15 @@ package com.sf.singleton;
  */
 public class Singleton1 {
 
-    // 自己需要创建对象
+    // 2、自己需要创建对象
+    // 如果是静态的属性  在类声明时就被创建了
     private static Singleton1 instance = new Singleton1();
 
-    // 将构造器设置为私有的
+    // 1、将构造器设置为私有的
     private Singleton1(){
     }
 
-    // 构建一个返回方法
+    // 3、构建一个返回对象的方法
     // 如果方法是非静态的 方法需要被对象调用
     // 因为此时外部是拿不到对象的  所以将方法设置为静态的
     public static Singleton1 getInstance(){

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

@@ -6,6 +6,7 @@ package com.sf.singleton;
  */
 public class Singleton2 {
 
+    // 不在声明时就创建对象了
     private static Singleton2 instance;
     private Singleton2(){}
 

+ 2 - 0
spring-demo/src/main/java/com/sf/singleton/Singleton3.java

@@ -9,7 +9,9 @@ public class Singleton3 {
 
     private Singleton3(){}
 
+    // 静态内部类也是类的成员
     private static class SingletonInner{
+        // 类成员之间可以互相调用私有方法和属性
         private static final Singleton3 INSTANCE = new Singleton3();
     }
 

+ 4 - 2
spring-demo/src/main/resources/spring-beans-new.xml

@@ -32,10 +32,12 @@
         <constructor-arg name="name" value="guest"></constructor-arg>
     </bean>
 
+    <!-- Role role1 = new Role();  role1.setDesc(String[]); -->
     <bean id="role1" class="com.sf.Role">
 <!--        <constructor-arg name="name" value="guest"></constructor-arg>-->
         <property name="name" value="guest"></property>
         <property name="desc">
+<!--        String[] arr = new String[2];  arr[0] = "访客"; -->
             <array>
                 <value>访客</value>
                 <value>没权限</value>
@@ -74,10 +76,10 @@
 
     <bean id="role4" class="com.sf.Role">
         <property name="name" value="guest"></property>
-        <property name="userList" ref="userList"></property>
+        <property name="userList" ref="userListId"></property>
     </bean>
 
-    <util:list id="userList">
+    <util:list id="userListId">
         <ref bean="user1"/>
         <ref bean="user2"/>
     </util:list>

+ 2 - 0
spring-demo/src/main/resources/spring-beans.xml

@@ -5,12 +5,14 @@
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
     <!--    把名字 和 类路径配置进去-->
+    <!-- User user = new User();   user.setName("zhangsan");   user.setDesc("普通用户");-->
     <bean id="user" class="com.sf.User">
         <!--        如果要给属性赋值 使用property-->
         <property name="name" value="zhangsan"/>
         <property name="desc" value="普通用户"/>
     </bean>
 
+    <!--  new User("lisi","普通用户")-->
     <bean id="user2" class="com.sf.User">
         <constructor-arg name="name" value="lisi"></constructor-arg>
         <constructor-arg name="desc" value="普通用户"></constructor-arg>

+ 8 - 2
spring-demo/src/main/resources/spring-singleton.xml

@@ -4,11 +4,17 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
-<!--    默认是单例的-->
-    <bean id="role" class="com.sf.Role" scope="singleton"></bean>
+    <!--    默认是单例的-->
+<!--    <bean id="role" class="com.sf.Role" scope="singleton"></bean>-->
+    <!--   显示声明为多例的 prototype-->
     <bean id="user" class="com.sf.User" scope="prototype"></bean>
 
+    <!--   bean的生命周期  创建 - 初始化 init-method - 可以使用 - 销毁 destroy-method -->
     <bean id="auth" class="com.sf.Auth" init-method="init" destroy-method="destroy">
         <property name="name" value="没权限"/>
     </bean>
+
+    <!--    把自定义的bean后置处理器 加载到容器中-->
+    <bean id = "myBeanPost" class="com.sf.lifecycle.MyBeanPost">
+    </bean>
 </beans>

+ 7 - 0
spring-demo/src/test/java/com/sf/TestSingleton.java

@@ -22,9 +22,16 @@ public class TestSingleton {
 
     @Test
     public void testLife() {
+        // 创建容器  多态的使用
+        // 声明时类型A  a = new  运行时类型B()
+        // A是B的父类 或者 A是B的实现接口
         ApplicationContext context = new ClassPathXmlApplicationContext("spring-singleton.xml");
+//        ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext("spring-singleton.xml");
         Auth auth = context.getBean(Auth.class);
         System.out.println(auth);
+        // 关闭容器  因为多态的使用 强转成运行时类型 才能调用运行时类型的方法
         ((ClassPathXmlApplicationContext)context).close();
+//        context1.close();
     }
+
 }