本文最后更新于:December 26, 2021 am
Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力。Spring 框架不局限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。
目录 1.设值注入(set注入) 调用类的set方法。
1.1 简单类型 借助set方法来实现,所以,需要给类创建set
方法。
用法:
<bean id ="" class ="" > <property name ="" value ="" /> <property name ="" value ="" /> </bean >
其中,id
是自定义的唯一值,class
是对应类的全限定名称;property
用来给属性赋值,一个property
只能给一个属性赋值,name
是属性名称,value
是属性的值。
注意:name
属性在类中如果没有定义,但有对应的set
方法,则依然可以正常运行!!如:没有定义age属性,但有一个setAge()方法,则程序依然可以正常运行。因为,name属性只是去找有没有对应的set
方法,而不管有没有此属性。
示例:
Person.java 类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package com.tothefor.dao;public class Person { private String name; private int age; private int money; public void setName (String name) { this .name = name; } public void setAge (int age) { this .age = age; } public void setMoney (int money) { this .money = money; } @Override public String toString () { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", money=" + money + '}' ; } }
配置文件 applicationContext.xml:
<bean id ="teP" class ="com.tothefor.dao.Person" > <property name ="name" value ="龍" /> <property name ="age" value ="123" /> <property name ="money" value ="456" /> </bean >
测试类:
@Test public void test04 () { String config = "bao1/applicationContext.xml" ; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(config); Person teP = (Person) applicationContext.getBean("teP" ); System.out.println(teP); }
1.2 引用类型 Person类中包含引用类型School。
<bean id ="myP" class ="com.tothefor.dao.bao2.Person" > <property name ="name" value ="loong" /> <property name ="age" value ="234" /> <property name ="money" value ="34" /> <property name ="school" ref ="myS" /> </bean > <bean id ="myS" class ="com.tothefor.dao.bao2.School" > <property name ="ad" value ="cdut" /> <property name ="name" value ="ttttttt" /> </bean >
其他使用同上,测试类可参考 1.1
。
2.构造注入 调用有参构造函数。在创建对象的同时,在构造方法中给属性赋值。使用 <constructor-arg>
标签,且一个此标签表示构造方法中的一个参数,若有多个参数则需要写多个此标签。 标签的属性:
name:表示构造方法中的形参名;
inde:表示构造方法中参数的位置,从左到右以0开始表示;
value:当参数类型是简单类型时,使用value;
ref:当参数类型是引用类型时,使用ref;
<bean id ="myFun" class ="com.tothefor.dao.bao3.Person" > <constructor-arg name ="name" value ="loong" /> <constructor-arg name ="age" value ="23" /> <constructor-arg name ="school" ref ="mySS" /> </bean > <bean id ="mySS" class ="com.tothefor.dao.bao3.School" > <property name ="name" value ="tewqewt" /> <property name ="adress" value ="asdfghjk" /> </bean >
示例:
Person类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package com.tothefor.dao.bao3;public class Person { private String name; private int age; private School school; @Override public String toString () { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", school=" + school + '}' ; } public Person (String name, int age, School school) { this .name = name; this .age = age; this .school = school; } public void setName (String name) { this .name = name; } public void setAge (int age) { this .age = age; } public void setSchool (School school) { this .school = school; } }
applicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <?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 ="myFun" class ="com.tothefor.dao.bao3.Person" > <constructor-arg name ="name" value ="loong" /> <constructor-arg name ="age" value ="23" /> <constructor-arg name ="school" ref ="mySS" /> </bean > <bean id ="mySS" class ="com.tothefor.dao.bao3.School" > <property name ="name" value ="tewqewt" /> <property name ="adress" value ="asdfghjk" /> </bean > </beans > <bean id ="myFun" class ="com.tothefor.dao.bao3.Person" > <constructor-arg index ="0" value ="loong" /> <constructor-arg index ="1" value ="23" /> <constructor-arg index ="2" ref ="mySS" /> </bean > <bean id ="mySS" class ="com.tothefor.dao.bao3.School" > <property name ="name" value ="tewqewt" /> <property name ="adress" value ="asdfghjk" /> </bean > 以上实现效果是一样的,可自行分开进行测试。 <bean id ="myFun" class ="com.tothefor.dao.bao3.Person" > <constructor-arg value ="loong" /> <constructor-arg value ="23" /> <constructor-arg ref ="mySS" /> </bean > <bean id ="mySS" class ="com.tothefor.dao.bao3.School" > <property name ="name" value ="tewqewt" /> <property name ="adress" value ="asdfghjk" /> </bean >
测试类:
@Test public void test06 () { String config = "bao3/applicationContext.xml" ; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(config); Person teP = (Person) applicationContext.getBean("myFun" ); System.out.println(teP); }
3.构造注入创建文件对象 可以利用此方法,读到文件。
<bean id ="myFile" class ="java.io.File" > <constructor-arg name ="parent" value ="D:\a\b\c" /> <constructor-arg name ="child" value ="read.txt" /> </bean >
测试类
File mfile = (File)applicationContext.getBean("myFile" ); System.out.println(mfile.getName());
4.引用类型的自动注入 4.1 byName(按名称注入) java类中引用类型的属性名和spring容器中(配置文件中)的<bean> 的id名称一样,且数据类型是一致的,这样spring能够自动
赋值给引用类型,也就不再需要在其他bean中再次声明。
语法:
<bean id="xxx" class ="yyy" autowire="byName" > 简单类型属性的赋值 </bean>
示例:
某个类中的属性
private String name;private int age;private int money;private School school;
配置文件:
<bean id ="myP" class ="com.tothefor.dao.bao2.Person" > <property name ="name" value ="loong" /> <property name ="age" value ="234" /> <property name ="money" value ="34" /> </bean > <bean id ="school" class ="com.tothefor.dao.bao2.School" > <property name ="ad" value ="cdut" /> <property name ="name" value ="ttttttt" /> </bean >
4.2 byType(按类型注入) Java类中引用类型的数据类型和spring容器中(配置文件中)的<bean> 的class属性是同源关系
的,这样能够赋值给引用类型。
同源关系:
java类中引用类型的数据类型和 bean 中的 class 的值是一样的
。
java类中引用类型的数据类型和 bean 中的 class 的值是父子类关系
。
java类中引用类型的数据类型和 bean 中的 class 的值是接口和实现类的关系
。
用法同byName一样,只是将 autowire的值改为 byType 即可。
注意:在byType中,xml配置文件中声明bean只能有一个符合条件的,不能有多余的,否则会报错。如:同一个class,既有符合条件1的bean,又有符合条件2的bean,这时就会报错。
示例:
某个类中的属性
private String name;private int age;private int money;private School school;
配置文件:
<bean id ="myP" class ="com.tothefor.dao.bao2.Person" > <property name ="name" value ="loong" /> <property name ="age" value ="234" /> <property name ="money" value ="34" /> </bean > <bean id ="mySchool" class ="com.tothefor.dao.bao2.School" > <property name ="ad" value ="cdut" /> <property name ="name" value ="ttttttt" /> </bean >
5.合并多个配置文件 当有多个配置文件时,可以用一个主配置文件将其他配置文件加载进来,主配置文件一般是不定义对象的。
使用方法:
<import resource ="其他配置文件的路径" /> 关键字 classpath:表示类路径(相对于target目录下的classes目录),在spring的配置文件中要指定其他文件的位置,需要使用classpath,用来加载文件。
示例:
String config = "applicationContext.xml" ;
<?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" > <import resource ="classpath:配置文件1路径" /> <import resource ="classpath:配置文件2路径" /> <import resource ="classpath:配置文件3路径" /> </beans >
其中,还可以使用通配符进行匹配(* :表示任意字符)。
示例:
<import resource ="classpath:a/abc-*.xml" />