Qing 1 ano atrás
pai
commit
a0f0b717bb

+ 183 - 51
spring-demo/.idea/workspace.xml

@@ -4,13 +4,14 @@
     <option name="autoReloadType" value="SELECTIVE" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="5aa6272e-23b4-48f4-9aaa-8caf45810aa0" name="Changes" comment="0403 javaSE">
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/Main.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/javase/Main.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/StaticInterview.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/javase/StaticInterview.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/TestCollection.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/javase/TestCollection.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/TestMath.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/javase/TestMath.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/TestString.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/javase/TestString.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/sf/TestStringIntern.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/sf/javase/TestStringIntern.java" afterDir="false" />
+    <list default="true" id="5aa6272e-23b4-48f4-9aaa-8caf45810aa0" name="Changes" comment="0410 reflect">
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/Role.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/sf/User.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/spring-beans-new.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/spring-beans.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/java/com/sf/TestUser.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" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -25,6 +26,8 @@
   <component name="FileTemplateManagerImpl">
     <option name="RECENT_TEMPLATES">
       <list>
+        <option value="Spring Xml File" />
+        <option value="Spring File" />
         <option value="Class" />
       </list>
     </option>
@@ -42,36 +45,52 @@
   <component name="ProjectViewState">
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;Application.Main.executor&quot;: &quot;Run&quot;,
-    &quot;Application.StaticInterview.executor&quot;: &quot;Run&quot;,
-    &quot;Application.TestCollection (1).executor&quot;: &quot;Run&quot;,
-    &quot;Application.TestCollection (2).executor&quot;: &quot;Run&quot;,
-    &quot;Application.TestCollection.executor&quot;: &quot;Run&quot;,
-    &quot;Application.TestMath.executor&quot;: &quot;Run&quot;,
-    &quot;Application.TestStringIntern.executor&quot;: &quot;Run&quot;,
-    &quot;Maven. [org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate].executor&quot;: &quot;Run&quot;,
-    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
-    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
-    &quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
-    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
-    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
-    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
-    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
-    &quot;settings.editor.selected.configurable&quot;: &quot;MavenSettings&quot;,
-    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "Application.Main.executor": "Run",
+    "Application.StaticInterview.executor": "Run",
+    "Application.TestCollection (1).executor": "Run",
+    "Application.TestCollection (2).executor": "Run",
+    "Application.TestCollection.executor": "Run",
+    "Application.TestMath.executor": "Run",
+    "Application.TestReflect.executor": "Run",
+    "Application.TestStringIntern.executor": "Run",
+    "Application.TestUser.executor": "Run",
+    "Application.TestUserByHCB.executor": "Run",
+    "JUnit.TestUser.executor": "Run",
+    "JUnit.TestUser.test.executor": "Run",
+    "JUnit.TestUser.testNew.executor": "Run",
+    "Maven. [org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate].executor": "Run",
+    "Maven.spring-demo [install].executor": "Run",
+    "RunOnceActivity.OpenProjectViewOnStart": "true",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "git-widget-placeholder": "master",
+    "kotlin-language-version-configured": "true",
+    "last_opened_file_path": "/Users/Qing/IdeaProjects/SiFu/VIP31/spring-demo/src/main/resources",
+    "node.js.detected.package.eslint": "true",
+    "node.js.detected.package.tslint": "true",
+    "node.js.selected.package.eslint": "(autodetect)",
+    "node.js.selected.package.tslint": "(autodetect)",
+    "nodejs_package_manager_path": "npm",
+    "project.structure.last.edited": "Project",
+    "project.structure.proportion": "0.1809181",
+    "project.structure.side.proportion": "0.22295515",
+    "settings.editor.selected.configurable": "preferences.keymap",
+    "vue.rearranger.settings.migration": "true"
   }
-}</component>
-  <component name="RunManager" selected="Application.TestCollection">
-    <configuration name="TestCollection (1)" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.TestCollection" />
+}]]></component>
+  <component name="RecentsManager">
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/src/main/resources" />
+    </key>
+  </component>
+  <component name="RunManager" selected="JUnit.TestUser.testNew">
+    <configuration name="TestCollection" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.sf.javase.TestCollection" />
       <module name="spring-demo" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.*" />
+          <option name="PATTERN" value="com.sf.javase.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -92,12 +111,12 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="TestCollection" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.javase.TestCollection" />
+    <configuration name="TestUser" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.sf.reflect.TestUser" />
       <module name="spring-demo" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.javase.*" />
+          <option name="PATTERN" value="com.sf.reflect.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -105,12 +124,12 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="TestCollection" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.javase.TestCollection" />
+    <configuration name="TestUserByHCB" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.sf.reflect.TestUserByHCB" />
       <module name="spring-demo" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.javase.*" />
+          <option name="PATTERN" value="com.sf.reflect.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -118,38 +137,60 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="TestMath" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.javase.TestMath" />
+    <configuration name="TestUser" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="spring-demo" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.javase.*" />
+          <option name="PATTERN" value="com.sf.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
+      <option name="PACKAGE_NAME" value="com.sf" />
+      <option name="MAIN_CLASS_NAME" value="com.sf.TestUser" />
+      <option name="TEST_OBJECT" value="class" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="TestStringIntern" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.sf.javase.TestStringIntern" />
+    <configuration name="TestUser.test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="spring-demo" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.sf.javase.*" />
+          <option name="PATTERN" value="com.sf.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
+      <option name="PACKAGE_NAME" value="com.sf" />
+      <option name="MAIN_CLASS_NAME" value="com.sf.TestUser" />
+      <option name="METHOD_NAME" value="test" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="TestUser.testNew" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="spring-demo" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.sf.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="com.sf" />
+      <option name="MAIN_CLASS_NAME" value="com.sf.TestUser" />
+      <option name="METHOD_NAME" value="testNew" />
+      <option name="TEST_OBJECT" value="method" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
     <recent_temporary>
       <list>
-        <item itemvalue="Application.TestCollection (1)" />
-        <item itemvalue="Application.TestCollection" />
-        <item itemvalue="Application.TestMath" />
-        <item itemvalue="Application.TestStringIntern" />
+        <item itemvalue="JUnit.TestUser.testNew" />
+        <item itemvalue="JUnit.TestUser.test" />
+        <item itemvalue="JUnit.TestUser" />
+        <item itemvalue="Application.TestUser" />
+        <item itemvalue="Application.TestUserByHCB" />
       </list>
     </recent_temporary>
   </component>
@@ -162,6 +203,9 @@
       <option name="presentableId" value="Default" />
       <updated>1712123972326</updated>
       <workItem from="1712123973520" duration="8552000" />
+      <workItem from="1712726738891" duration="779000" />
+      <workItem from="1712732632988" duration="8215000" />
+      <workItem from="1712972174804" duration="13655000" />
     </task>
     <task id="LOCAL-00001" summary="0403 javaSE">
       <option name="closed" value="true" />
@@ -171,14 +215,102 @@
       <option name="project" value="LOCAL" />
       <updated>1712134844743</updated>
     </task>
-    <option name="localTasksCounter" value="2" />
+    <task id="LOCAL-00002" summary="0403 javaSE">
+      <option name="closed" value="true" />
+      <created>1712726762198</created>
+      <option name="number" value="00002" />
+      <option name="presentableId" value="LOCAL-00002" />
+      <option name="project" value="LOCAL" />
+      <updated>1712726762198</updated>
+    </task>
+    <task id="LOCAL-00003" summary="0410 reflect">
+      <option name="closed" value="true" />
+      <created>1712739686280</created>
+      <option name="number" value="00003" />
+      <option name="presentableId" value="LOCAL-00003" />
+      <option name="project" value="LOCAL" />
+      <updated>1712739686280</updated>
+    </task>
+    <option name="localTasksCounter" value="4" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="version" value="3" />
   </component>
+  <component name="Vcs.Log.Tabs.Properties">
+    <option name="OPEN_GENERIC_TABS">
+      <map>
+        <entry key="105ff90c-1298-45f8-accf-4e56367b1b7b" value="TOOL_WINDOW" />
+        <entry key="2836cf7e-9804-4f89-86fa-98fe8e7d455e" value="TOOL_WINDOW" />
+      </map>
+    </option>
+    <option name="TAB_STATES">
+      <map>
+        <entry key="105ff90c-1298-45f8-accf-4e56367b1b7b">
+          <value>
+            <State>
+              <option name="FILTERS">
+                <map>
+                  <entry key="branch">
+                    <value>
+                      <list>
+                        <option value="HEAD" />
+                      </list>
+                    </value>
+                  </entry>
+                  <entry key="structure">
+                    <value>
+                      <list>
+                        <option value="dir:/Users/Qing/IdeaProjects/SiFu/VIP31/spring-demo" />
+                      </list>
+                    </value>
+                  </entry>
+                </map>
+              </option>
+              <option name="SHOW_ONLY_AFFECTED_CHANGES" value="true" />
+            </State>
+          </value>
+        </entry>
+        <entry key="2836cf7e-9804-4f89-86fa-98fe8e7d455e">
+          <value>
+            <State>
+              <option name="FILTERS">
+                <map>
+                  <entry key="branch">
+                    <value>
+                      <list>
+                        <option value="HEAD" />
+                      </list>
+                    </value>
+                  </entry>
+                  <entry key="structure">
+                    <value>
+                      <list>
+                        <option value="dir:/Users/Qing/IdeaProjects/SiFu/VIP31/spring-demo" />
+                      </list>
+                    </value>
+                  </entry>
+                </map>
+              </option>
+              <option name="SHOW_ONLY_AFFECTED_CHANGES" value="true" />
+            </State>
+          </value>
+        </entry>
+        <entry key="MAIN">
+          <value>
+            <State />
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
   <component name="VcsManagerConfiguration">
     <MESSAGE value="0403 javaSE" />
-    <option name="LAST_COMMIT_MESSAGE" value="0403 javaSE" />
+    <MESSAGE value="0410 reflect" />
+    <option name="LAST_COMMIT_MESSAGE" value="0410 reflect" />
+  </component>
+  <component name="XSLT-Support.FileAssociations.UIState">
+    <expand />
+    <select />
   </component>
 </project>

+ 39 - 13
spring-demo/pom.xml

@@ -1,20 +1,46 @@
 <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>
+         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>
 
-  <groupId>com.sf</groupId>
-  <artifactId>spring-demo</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>jar</packaging>
+    <groupId>com.sf</groupId>
+    <artifactId>spring-demo</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
 
-  <name>spring-demo</name>
-  <url>http://maven.apache.org</url>
+<!--    /Users/Qing/.m2/repository/com/sf/spring-demo/1.0-SNAPSHOT/spring-demo-1.0-SNAPSHOT.jar-->
 
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
+    <name>spring-demo</name>
+    <url>http://maven.apache.org</url>
 
-  <dependencies>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
 
-  </dependencies>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>6.1.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>5.10.2</version>
+        </dependency>
+<!--        /Users/Qing/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.2/junit-jupiter-5.10.2.jar -->
+    </dependencies>
+
+    <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>

+ 43 - 0
spring-demo/src/main/java/com/sf/Role.java

@@ -0,0 +1,43 @@
+package com.sf;
+
+import java.util.Arrays;
+
+public class Role {
+
+    public Role() {
+        System.out.println("Role构造器");
+    }
+
+    public Role(String name) {
+        System.out.println("Role构造器 name");
+        this.name = name;
+    }
+
+    private String name;
+
+    private String[] desc;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String[] getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String[] desc) {
+        this.desc = desc;
+    }
+
+    @Override
+    public String toString() {
+        return "Role{" +
+                "name='" + name + '\'' +
+                ", desc=" + Arrays.toString(desc) +
+                '}';
+    }
+}

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

@@ -0,0 +1,78 @@
+package com.sf;
+
+public class User {
+    // User user = new User();
+    // user.setName();
+    private String name;
+
+    private Role role;
+
+    // 描述信息
+    private String desc;
+
+    // 当没有声明构造器时  会提供一个默认的无参构造器
+    // 当声明了某一构造器  会去掉默认提供的无参构造器
+    public User() {
+        System.out.println("User构造器");
+    }
+
+    public User(String name) {
+        System.out.println("User构造器 name");
+        this.name = name;
+    }
+
+    public User(String name, String desc) {
+        System.out.println("User构造器 name + desc");
+        this.name = name;
+        this.desc = desc;
+    }
+
+    public User(String name, String desc, Role role) {
+        System.out.println("User构造器 name + desc + role");
+        this.name = name;
+        this.desc = desc;
+        this.role = role;
+    }
+
+//    public User(String name, Role role, String desc) {
+//        this.name = name;
+//        this.desc = desc;
+//        this.role = role;
+//    }
+
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        System.out.println("setName:" + name);
+        this.name = name;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        System.out.println("setDesc:" + desc);
+        this.desc = desc;
+    }
+
+    public Role getRole() {
+        return role;
+    }
+
+    public void setRole(Role role) {
+        this.role = role;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+                "name='" + name + '\'' +
+                ", role=" + role +
+                ", desc='" + desc + '\'' +
+                '}';
+    }
+}

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

@@ -0,0 +1,36 @@
+<?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
+        https://www.springframework.org/schema/beans/spring-beans.xsd">
+
+    <bean id="user" class="com.sf.User">
+        <constructor-arg name="name" value="zhaoliu"></constructor-arg>
+        <constructor-arg name="desc" value="普通用户"></constructor-arg>
+        <!--        如果我们想多个对象复用一个对象 可以使用ref进行关联-->
+        <constructor-arg name="role" ref="role"></constructor-arg>
+    </bean>
+
+    <bean id="user1" class="com.sf.User">
+        <constructor-arg name="name" value="zhangsan"></constructor-arg>
+        <constructor-arg name="desc" value="普通用户"></constructor-arg>
+        <!--        如果我们想多个对象复用一个对象 可以使用ref进行关联-->
+        <constructor-arg name="role" ref="role"></constructor-arg>
+    </bean>
+
+    <bean id="role" class="com.sf.Role">
+        <constructor-arg name="name" value="guest"></constructor-arg>
+    </bean>
+
+    <bean id="role1" class="com.sf.Role">
+<!--        <constructor-arg name="name" value="guest"></constructor-arg>-->
+        <property name="name" value="guest"></property>
+        <property name="desc">
+            <array>
+                <value>访客</value>
+                <value>没权限</value>
+            </array>
+        </property>
+    </bean>
+
+</beans>

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

@@ -0,0 +1,50 @@
+<?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
+        https://www.springframework.org/schema/beans/spring-beans.xsd">
+
+    <!--    把名字 和 类路径配置进去-->
+    <bean id="user" class="com.sf.User">
+        <!--        如果要给属性赋值 使用property-->
+        <property name="name" value="zhangsan"/>
+        <property name="desc" value="普通用户"/>
+    </bean>
+
+    <bean id="user2" class="com.sf.User">
+        <constructor-arg name="name" value="lisi"></constructor-arg>
+        <constructor-arg name="desc" value="普通用户"></constructor-arg>
+    </bean>
+
+    <!-- String str = "\""; -->
+    <!-- 如果在value中配置 小于号和大于号  -->
+    <bean id="user3" class="com.sf.User">
+        <property name="name" value="&lt;&gt;"/>
+        <property name="desc">
+            <value><![CDATA[a<>b]]></value>
+        </property>
+    </bean>
+
+
+    <bean id="user1" class="com.sf.User">
+        <constructor-arg name="name" value="wangwu"></constructor-arg>
+        <constructor-arg name="desc" value="普通用户"></constructor-arg>
+        <constructor-arg name="role">
+            <bean class="com.sf.Role">
+                <constructor-arg name="name" value="admin"/>
+            </bean>
+        </constructor-arg>
+    </bean>
+
+    <bean id="user4" class="com.sf.User">
+        <constructor-arg name="name" value="zhaoliu"></constructor-arg>
+        <constructor-arg name="desc" value="普通用户"></constructor-arg>
+        <!--        如果我们想多个对象复用一个对象 可以使用ref进行关联-->
+        <constructor-arg name="role" ref="role"></constructor-arg>
+    </bean>
+
+    <bean id="role" class="com.sf.Role">
+        <constructor-arg name="name" value="guest"></constructor-arg>
+    </bean>
+
+</beans>

+ 92 - 0
spring-demo/src/test/java/com/sf/TestUser.java

@@ -0,0 +1,92 @@
+package com.sf;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * src/main/java/com/sf
+ * src/test/java/com/sf
+ * 编写一个对user的测试类
+ */
+public class TestUser {
+
+    @Test
+    public void test() {
+        // 先引入spring容器  然后查找user的bean
+        // ApplicationContext 是应用上下文  容器的意思
+        ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");
+        User user = (User) context.getBean("user");
+        System.out.println(user);
+
+        User user1 = (User) context.getBean("user1");
+        System.out.println(user1);
+
+        User user2 = (User) context.getBean("user2");
+        System.out.println(user2);
+
+        User user3 = (User) context.getBean("user3");
+        System.out.println(user3);
+
+        User user4 = (User) context.getBean("user4");
+        System.out.println(user4);
+
+        Role role = (Role) context.getBean("role");
+        System.out.println(role);
+    }
+
+
+    @Test
+    public void testNew() {
+        ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans-new.xml");
+        User user = (User) context.getBean("user");
+        System.out.println(user);
+
+        User user1 = (User) context.getBean("user1");
+        System.out.println(user1);
+
+        // role只被创建一次 比较不同user的role对象  是同一个
+        System.out.println(user.getRole() == user1.getRole());
+
+        Role role = (Role) context.getBean("role1");
+        System.out.println(role);
+    }
+
+    @Test
+    public void test1(){
+//        User user = new User("wangwu","sth");
+//        Role role = new Role("admin");
+//        user.setRole(role);
+
+
+//        Role role = new Role("admin");
+//        User user = new User("wangwu","sth",role);
+        // 在配置文件中生效
+        // 声明一个对象 对应一个bean标签
+
+        //  <bean class="com.sf.Role">
+        //     <constructor-arg name="name" value="admin"/>
+        //  </bean>
+
+        // 包裹为构造器的参数
+        // <constructor-arg name="name" value="wangwu"></constructor-arg>
+        // <constructor-arg name="role">
+        //    <bean class="com.sf.Role">
+        //         <constructor-arg name="name" value="admin"/>
+        //    </bean>
+        //  </constructor-arg>
+
+        // 变成调用全参构造器
+        //   <bean id="user1" class="com.sf.User">
+        //        <constructor-arg name="name" value="wangwu"></constructor-arg>
+        //        <constructor-arg name="desc" value="普通用户"></constructor-arg>
+        //        <constructor-arg name="role">
+        //            <bean class="com.sf.Role">
+        //                <constructor-arg name="name" value="admin"/>
+        //            </bean>
+        //        </constructor-arg>
+        //    </bean>
+
+
+    }
+}