其他分享
首页 > 其他分享> > Spring3-1

Spring3-1

作者:互联网

Spring基本上是所有企业开发的基础,公司都会问及Spring的如何实现甚至实现原理。本文从Spring是什么,如何配置Spring和bean配置来介绍Spring框架。

参考文章:

https://www.cnblogs.com/xu-cceed3w/p/9074313.html

https://blog.csdn.net/chs007chs/article/details/80536452

https://www.cnblogs.com/naihuangbao/p/10134247.html

Spring

1.Spring是一个开源框架

2.Spring为简化企业级应用开发而生,使用Spring可以使简化的JavaBean实现从前只有EJB才能实现的功能

3.Spring是一个IOC(DI)和AOP容器开源框架

总结:  

Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架,Spring致力于提供一种方法管理你的业务对象,Spring的主要
目的是使JavaEE易用和促进好编程习惯,Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案,Spring贯穿表现
层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Spring特性

1.轻量级:Spring是非侵入式的

2.依赖注入:IOC(DI)

3.面向切面编程:AOP

4.一站式开发:自身提供了展现层的SpringMVC和持久层Spring JDBC

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Spring体系架构

模块结构图:核心容器(Core Container)、AOP(Aspect Oriented Programming)、设备支持(Instrument)、数据访问及集成(Data Access/Integratioin)、Web、报文发送(Messaging)、Test等模块。

1.核心容器:由spring-beans, spring-core, spring-context和spring-expression 4个模块组成。

(1)spring-core:控制反转IoC(Inversion of Control)与依赖注入DI(Dependency Injection)的基本实现,控制反转是种设计思想,即将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

(2)spring-beans:Bean工厂与bean的装配,BeanFactory接口使用控制反转对应用程序的配置、依赖性规范与实际的应用程序代码进行分离。但是BeanFactory容器实例化后并不会自动实例化Bean,只有当Bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。(面向Spring本身)

(3)spring-context:spring的context上下文,即IoC容器,它扩展了BeanFactory,为它添加了Bean生命周期管理、框架事件体系、资源加载透明化等功能,此外该模块还提供了很多企业级支持,如远程访问、任务调度等。ApplicationContext是该模块的核心接口,它扩展了BeanFactory,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。(面向Spring客户端开发者)

(4)spring-expression:spring表达式语言,是统计表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。最出色的要数函数调用和简单字符串的模板函数。

2.AOP和设备支持

(1)spring-aop:面向切面编程,aop就是在某一个类或方法执行前后打个标记,声明在执行到这里之前要先执行什么,执行完这里之后要接着执行什么,插入新的执行方法。在Spring中,它是以JVM的动态代理技术为基础,然后设计一系列AOP横切实现,比如前置通知、返回通知、异常通知等,同时Pointcut接口来匹配切入点,可以使用现有切入点来设计横切面,也可以扩展相关方法根据需求进行切入。

(2)spring-aspects:集成AspectJ, 主要是为Spring AOOP提供多种AOP实现方法。

(3)spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器。该模块是基于JAVA SE中的“java.lang.instrument”进行设计的,应该算是AOP的一个支援模块,主要作用是在JVM启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的实现。

3.数据访问及集成

(1)spring-jdbc:jdbc的支持,主要是提供JDBC模板方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程,主要实现类JdbcTemplate、SimpleJdbcTemplate、NamedParameterJdbcTemplate。

(2)spring-tx:事务控制,通过它的AOP配置,可以灵活的配置在任何一层,但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的。

(3)spring-orm:对象关系映射,集成orm框架,主要集成Hibernate、Java Persistence API(JPA)和Java Data Object(JDO)用于资源管理、数据访问对象(DAO)的实现和事务策略。

(4)spring-oxm:对象xml映射,OXM是Object to XML Mapping的缩写,例如:jaxb, castor xmlbeans,JiBx,XStream等。

(5)spring-jms:java消息服务。

(6)spring-messaging:为Spring框架集成一些基础的报文发送应用。

4.Web

(1)spring-web:提供最基础的web支持,主要建立在核心容器上,通过Servlet或者Listener来初始化IOC容器,也包括一些与Web相关的支持。

(2)spring-webmvc:实现了Spring MVC的Web应用。

(3)spring-websocket:主要是与Web前端的全双工通讯协议。

(4)spring-webflux:是一个新的非阻塞式Reactive Web框架,可以用来建立异步、非阻塞、事件驱动的服务,并且扩展性非常好。

总结:

1.学习Spring的源码时,可以从Spring-core入手,其次是Spring-beans和spring-aop,随后是spring-context,再其次是spring-tx和spring-orm。

2.spring-core依赖了commons-logging,而其他模块都依赖了spring-core,整个spring框架都依赖了commons-logging。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Spring优点

1.方便解耦,简化开发,依赖注入
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

2.AOP 编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

3.声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程

4.方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序方便集成各种优秀框架Spring不排斥各种优秀的开源框架,其内部
提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz 等)的直接支持;

5. 降低JavaEE API的使用难度
Spring对 JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Spring配置

1.下载插件  (下载地址)https://spring.io/tools3/sts/all

2.导入相关包

①Spring jar包 (下载地址)http://repo.spring.io/libs-release-local/org/springframework/spring/

②commons-logging.jar包  (下载地址)http://commons.apache.org/proper/commons-logging/download_logging.cgi

3.创建Spring Bean Configuration File 的xml文件

4.编写API

①创建Spring的IOC容器对象

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("stu_teach.xml");

②从IOC容器获取Bean实例

Teacher teacher = (Teacher) applicationContext.getBean("teacher1");

List<Student> students = (List<Student>) applicationContext.getBean("stus");

③调用方法

④配置bean的xml文件

 1 <bean id="teacher1" class="com.thxy.spring.Teacher" p:name="Liu"
 2         p:school="thxy" p:stus-ref="stus"></bean>
 3 
 4     <bean id="stu1" class="com.thxy.spring.Student" p:name="aaa"
 5         p:clazz="17软件一班"></bean>
 6     <bean id="stu2" class="com.thxy.spring.Student" p:name="bbb"
 7         p:clazz="17软件一班"></bean>
 8     <bean id="stu3" class="com.thxy.spring.Student" p:name="ccc"
 9         p:clazz="17软件一班"></bean>
10     <bean id="stu4" class="com.thxy.spring.Student" p:name="ddd"
11         p:clazz="17软件一班"></bean>
12     <bean id="stu5" class="com.thxy.spring.Student" p:name="eee"
13         p:clazz="17软件一班"></bean>
14     <bean id="stu6" class="com.thxy.spring.Student" p:name="fff"
15         p:clazz="17软件一班"></bean>
16 
17     <util:list id="stus">
18         <ref bean="stu1"></ref>
19         <ref bean="stu2"></ref>
20         <ref bean="stu3"></ref>
21         <ref bean="stu4"></ref>
22         <ref bean="stu5"></ref>
23         <ref bean="stu6"></ref>
24     </util:list>

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 总结:

1.整个spring框架都依赖了commons-logging。

2.Spring关联源码分析源码Source attchment(业界说法:优秀的软件工程师需要研究Spring源码3次)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

详解Spring Bean配置

前提储备知识:

IOC:Incersion of Control 反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源。而应用了IOC之后,则是容器主动将资源推送给他所管理的组件(Bean),组件所需要做的是选择一种合适的方式(属性注入,构造器注入)来接受资源,也被称为查找的被动形式。

DI:IOC的另一种表述方式:即组件以一些预先定义的方法(属性注入,构造器注入)来接受容器的资源注入。

IOC容器:BeanFactory&ApplicationContext

1.BeanFactory:BeanFactory是Spring基础设施,面向Spring本身

2.ApplicationContext:ApplicationContext面向Spring开发者,获取容器bean对象

配置方式:基于全类名配置

配置形式:基于xml文件配置

依赖注入方式:

1.属性注入

Bean类

 1 package com.thxy.spring.demo;
 2 
 3 public class Student {
 4     private String name;
 5     private String school;
 6     private String major;
 7     private String clazz;
 8 
 9     public void setName(String name) {
10         this.name = name;
11     }
12 
13     public void setSchool(String school) {
14         this.school = school;
15     }
16 
17     public void setMajor(String major) {
18         this.major = major;
19     }
20 
21     public void setClazz(String clazz) {
22         this.clazz = clazz;
23     }
24 
25     @Override
26     public String toString() {
27         return "Student [name=" + name + ", school=" + school + ", major=" + major + ", clazz=" + clazz + "]";
28     }
29 
30     public Student(String name, String school, String major, String clazz) {
31         this();
32         this.name = name;
33         this.school = school;
34         this.major = major;
35         this.clazz = clazz;
36     }
37 
38     public Student() {
39         System.out.println("init a student...");
40     }
41 
42 }

Main实现类

 1 package com.thxy.spring.demo;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class Main {
 7     public static void main(String[] args) {
 8         @SuppressWarnings("resource")
 9         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("student_teacher.xml");
10         Student student = (Student) applicationContext.getBean("student_1");
11         System.out.println(student.toString());
12     }
13 }

Bean配置文件xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:util="http://www.springframework.org/schema/util"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
 8     <bean id="student_1" class="com.thxy.spring.demo.Student">
 9         <property name="name" value="aaa"></property>
10         <property name="school" value="天河学院"></property>
11         <property name="major" value="软件专业"></property>
12         <property name="clazz">
13             <value><![CDATA[17级]]></value>
14         </property>
15     </bean>
16 </beans>

①class:bean类的全类名通过反射方式在IOC容器创建bean,提供默认构造器

②id:标识容器中的bean,id是唯一的

③property:bean类中的成员属性

④value:通过setter的方式向bean成员属性赋值

总结:

1.字面值:可用字符串表示的值,可用通过<value>元素标签或value属性注入基本数据类型及其封装类,String等类型可以采取字面值注入的方式。

2.若字面值中包含特殊字符,可以采用<![CDATA[]]>把字面值包裹起来。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.属性注入级联对象

Bean类

①Student类

 1 package com.thxy.spring.demo;
 2 
 3 public class Student {
 4     private String name;
 5     private String school;
 6     private String major;
 7     private String clazz;
 8     private Teacher teacher;
 9 
10     public void setName(String name) {
11         this.name = name;
12     }
13 
14     public void setSchool(String school) {
15         this.school = school;
16     }
17 
18     public void setMajor(String major) {
19         this.major = major;
20     }
21 
22     public void setClazz(String clazz) {
23         this.clazz = clazz;
24     }
25 
26     public void setTeacher(Teacher teacher) {
27         this.teacher = teacher;
28     }
29 
30     @Override
31     public String toString() {
32         return "Student [name=" + name + ", school=" + school + ", major=" + major + ", clazz=" + clazz + ", teacher="
33                 + teacher + "]";
34     }
35 
36     public Student(String name, String school, String major, String clazz, Teacher teacher) {
37         this();
38         this.name = name;
39         this.school = school;
40         this.major = major;
41         this.clazz = clazz;
42         this.teacher = teacher;
43     }
44 
45     public Student() {
46         System.out.println("init a student...");
47     }
48 
49 }

②Teacher类

 1 package com.thxy.spring.demo;
 2 
 3 public class Teacher {
 4     private String name;
 5     private String school;
 6     private String major;
 7 
 8     public void setName(String name) {
 9         this.name = name;
10     }
11 
12     public void setSchool(String school) {
13         this.school = school;
14     }
15 
16     public void setMajor(String major) {
17         this.major = major;
18     }
19 
20     @Override
21     public String toString() {
22         return "Teacher [name=" + name + ", school=" + school + ", major=" + major + "]";
23     }
24 
25     public Teacher(String name, String school, String major) {
26         this();
27         this.name = name;
28         this.school = school;
29         this.major = major;
30     }
31 
32     public Teacher() {
33         System.out.println("init a teacher...");
34     }
35 
36 }

Main实现类

 1 package com.thxy.spring.demo;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class Main {
 7     public static void main(String[] args) {
 8         @SuppressWarnings("resource")
 9         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("student_teacher.xml");
10         Student student = (Student) applicationContext.getBean("student_1");
11         System.out.println(student.toString());
12     }
13 }

Bean配置文件xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:util="http://www.springframework.org/schema/util"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
 8     <bean id="student_1" class="com.thxy.spring.demo.Student">
 9         <property name="name" value="aaa"></property>
10         <property name="school" value="天河学院"></property>
11         <property name="major" value="软件专业"></property>
12         <property name="clazz">
13             <value><![CDATA[17级]]></value>
14         </property>
15         <property name="teacher" ref="teacher_1"></property>
16     </bean>
17     <bean id="teacher_1" class="com.thxy.spring.demo.Teacher">
18         <property name="name" value="Liu"></property>
19         <property name="school" value="天河学院"></property>
20         <property name="major">
21             <value><![CDATA[<计算机系>]]></value>
22         </property>
23     </bean>
24 </beans>

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3.属性注入之内部bean(不能被外部引用)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 Bean配置文件xml文件

 1 <bean id="Student_2" class="com.thxy.spring.demo.Student">
 2         <property name="name" value="bbb"></property>
 3         <property name="school" value="天河学院"></property>
 4         <property name="major" value="软件工程"></property>
 5         <property name="clazz" value="17级"></property>
 6         <property name="teacher">
 7             <bean class="com.thxy.spring.demo.Teacher">
 8                 <property name="name" value="Liu"></property>
 9                 <property name="major" value="软件工程"></property>
10                 <property name="school" value="天河学院"></property>
11             </bean>
12         </property>
13     </bean>

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

4.构造器注入之级联对象

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

Bean配置文件xml文件

 1 <bean id="Student_3" class="com.thxy.spring.demo.Student">
 2     <constructor-arg value="ccc" type="java.lang.String"></constructor-arg>
 3     <constructor-arg value="天河学院" type="java.lang.String"></constructor-arg>
 4     <constructor-arg value="软件工程" type="java.lang.String"></constructor-arg>
 5     <constructor-arg value="17级" type="java.lang.String"></constructor-arg>
 6     <constructor-arg type="com.thxy.spring.demo.Teacher"
 7         ref="Teacher_3"></constructor-arg>
 8 </bean>
 9     <bean id="Teacher_3" class="com.thxy.spring.demo.Teacher">
10         <constructor-arg value="Liu" type="java.lang.String"></constructor-arg>
11         <constructor-arg value="天河学院" type="java.lang.String"></constructor-arg>
12         <constructor-arg type="java.lang.String">
13             <value><![CDATA[<计算机>]]></value>
14         </constructor-arg>
15     </bean>

缺点:构造器注入需要和构造器中参数个数和位置一致。若不一致则抛出异常

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'Student_3' defined in class path resource [student_teacher.xml]: Unsatisfied dependency expressed through constructor parameter 3: Ambiguous argument values for parameter of type [java.lang.String] - did you specify the correct bean references as arguments?

改良

 1 <bean id="Student_3" class="com.thxy.spring.demo.Student">
 2         <constructor-arg value="17级" name="clazz"></constructor-arg>
 3         <constructor-arg value="天河学院" name="school"></constructor-arg>
 4         <constructor-arg value="软件工程" name="major"></constructor-arg>
 5         <constructor-arg type="com.thxy.spring.demo.Teacher"
 6             ref="Teacher_3"></constructor-arg>
 7         <constructor-arg value="ccc" name="name"></constructor-arg>
 8     </bean>
 9     <bean id="Teacher_3" class="com.thxy.spring.demo.Teacher">
10         <constructor-arg value="Liu" type="java.lang.String"></constructor-arg>
11         <constructor-arg value="天河学院" type="java.lang.String"></constructor-arg>
12         <constructor-arg type="java.lang.String">
13             <value><![CDATA[<计算机>]]></value>
14         </constructor-arg>
15     </bean>

使用name属性可以将构造器注入任意改变位置不需和构造函数的位置一致。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

单独为级联属性赋值(属性需要先初始化才可以为级联属性赋值)

 1 <bean id="Student_4" class="com.thxy.spring.demo.Student">
 2         <constructor-arg name="name" value="ddd"></constructor-arg>
 3         <constructor-arg name="school" value="天河学院"></constructor-arg>
 4         <constructor-arg name="major" value="软件工程"></constructor-arg>
 5         <constructor-arg name="clazz">
 6             <null />
 7         </constructor-arg>
 8         <constructor-arg name="teacher" ref="teacher_1">
 9         </constructor-arg>
10         <property name="teacher.name" value="liusss"></property>
11     </bean>

注意:

1.<property name="teacher.name" value="liusss"></property>一句中需要Student中有getter方法赋值获取

 2.引用赋值为null表达是<null />

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

配置集合属性

List集合

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:util="http://www.springframework.org/schema/util"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
 8     <bean id="student_1" class="com.spring.demo.Student">
 9         <property name="name" value="aaa"></property>
10         <property name="majoy" value="软件工程"></property>
11     </bean>
12     <bean id="student_2" class="com.spring.demo.Student">
13         <property name="name" value="bbb"></property>
14         <property name="majoy" value="软件工程"></property>
15     </bean>
16     <bean id="teacher_1" class="com.spring.demo.Teacher">
17         <property name="name" value="ccc"></property>
18         <property name="students">
19             <list>
20                 <ref bean="student_1"></ref>
21                 <ref bean="student_2"></ref>
22             </list>
23         </property>
24     </bean>
25 </beans>
 1 package com.spring.demo;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class Main {
 7     public static void main(String[] args) {
 8         @SuppressWarnings("resource")
 9         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("stu_teach.xml");
10         Teacher teacher = applicationContext.getBean(Teacher.class);
11         System.out.println(teacher.toString());
12     }
13 }

Map集合

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:util="http://www.springframework.org/schema/util"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
 8     <bean id="student_1" class="com.spring.demo.Student">
 9         <property name="name" value="aaa"></property>
10         <property name="majoy" value="软件工程"></property>
11     </bean>
12     <bean id="student_2" class="com.spring.demo.Student">
13         <property name="name" value="bbb"></property>
14         <property name="majoy" value="软件工程"></property>
15     </bean>
16     <bean id="teacher_1" class="com.spring.demo.Teacher">
17         <property name="name" value="ccc"></property>
18         <property name="students">
19             <map>
20             <entry key="AA" value-ref="student_1"></entry>
21             <entry key="BB" value-ref="student_2"></entry>
22             </map>
23         </property>
24     </bean>
25 </beans>

使用<props>定义java.until.properties该标签使用多个<prop>做子标签,每个<prop>标签必须定义key属性

 1 package com.spring.demo;
 2 
 3 import java.util.Properties;
 4 
 5 public class DataSource {
 6     private Properties properties;
 7 
 8     public void setProperties(Properties properties) {
 9         this.properties = properties;
10     }
11 
12     @Override
13     public String toString() {
14         return "DataSource [properties=" + properties + "]";
15     }
16 
17     public DataSource(Properties properties) {
18         this();
19         this.properties = properties;
20     }
21 
22     public DataSource() {
23         System.out.println("init properties");
24     }
25 
26 }
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:util="http://www.springframework.org/schema/util"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
 8     <bean id="dataScoure" class="com.spring.demo.DataSource">
 9         <property name="properties">
10             <props>
11                 <prop key="user">root</prop>
12                 <prop key="password">123</prop>
13                 <prop key="driver">com.mysql.jdbc.Driver</prop>
14                 <prop key="url">jdbc:mysql///spring</prop>
15             </props>
16         </property>
17     </bean>
18 </beans>

配置单例的集合bean,以供多个bean进行引用需要导入util空间

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:util="http://www.springframework.org/schema/util"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
 8     <bean id="student_1" class="com.spring.demo.Student">
 9         <property name="name" value="aaa"></property>
10         <property name="majoy" value="软件工程"></property>
11     </bean>
12     <bean id="student_2" class="com.spring.demo.Student">
13         <property name="name" value="bbb"></property>
14         <property name="majoy" value="软件工程"></property>
15     </bean>
16     <bean id="teacher_1" class="com.spring.demo.Teacher">
17         <property name="name" value="ccc"></property>
18         <property name="students" ref="stus">
19         </property>
20     </bean>
21     <util:map id="stus">
22         <entry key="AAA" value-ref="student_1"></entry>
23         <entry key="BBB" value-ref="student_2"></entry>
24     </util:map>
25 </beans>

使用p命名空间为bean属性赋值,需要先导入p空间,相对于传统配置更简洁

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:util="http://www.springframework.org/schema/util"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
 8     <bean id="student_1" class="com.spring.demo.Student">
 9         <property name="name" value="aaa"></property>
10         <property name="majoy" value="软件工程"></property>
11     </bean>
12     <bean id="student_2" class="com.spring.demo.Student">
13         <property name="name" value="bbb"></property>
14         <property name="majoy" value="软件工程"></property>
15     </bean>
16     <util:map id="stus">
17         <entry key="AAA" value-ref="student_1"></entry>
18         <entry key="BBB" value-ref="student_2"></entry>
19     </util:map>
20     <bean id="teacher_2" class="com.spring.demo.Teacher" p:name="ddd" p:students-ref="stus"></bean>
21 </beans>

由上述可知:使用p命名空间和单例的集合bean的util空间可以更好配置bean。

标签:school,String,spring,Spring,Spring3,public,name
来源: https://www.cnblogs.com/KYAOYYW/p/10562329.html