2.使用有参构造函数创建对象(不存在无参)
实体类
package Com.Jsxs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor public class User { private String name; public void show(){ System.out.println("name="+name); } }
(1). 使用下标进行创建对象
index----> 有参构造函数的,属性从左向右排序
<bean id="user" class="Com.Jsxs.pojo.User"> <!-- 下标赋值 --> <constructor-arg index="0" value="吉士先生"/> </bean>
(2).使用类型进行创建对象
type: 指的是参数的类型,如果不是基本数据类型,那么需要使用权限定名
<bean id="user" class="Com.Jsxs.pojo.User"> <!-- 类型赋值 类型必须是全限定名 --> <constructor-arg type="java.lang.String" value="吉士先生"/> </bean>
(3).使用属性名进行创建对象
name: 指的是赋值属性的属性名叫什么
<!-- 直接通过参数名进行赋值--> <bean id="user" class="Com.Jsxs.pojo.User"> <constructor-arg name="name" value="吉士先生"/> </bean>
3. 使用有参和无参构造都存在的时候
有参和无参的方法都可以用,可以同时存在,不冲突;
4.总结
在配置文件的时候,容器中已经管理的对象就已经初始化了。
(五)、Spring 配置说明
1.alias(区分大小写)
大名和小名都可以指定
<alias name="需要修改的名字" alias="修改成什么"/>
实体类
package Com.Jsxs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private String name; public void show(){ System.out.println("name="+name); } }
配置
<?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="user" class="Com.Jsxs.pojo.User"> <property name="name" value="小明"/> </bean> <alias name="user" alias="us"/> </beans>
测试
import Com.Jsxs.pojo.User; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); User user = (User) context.getBean("us"); user.show(); } }
2.bean(一个实体类一个bean)
- id: 变量名
- class : 类的全限定名
- name: 可以起别名(不限制一个)
<bean id="user" class="Com.Jsxs.pojo.User" name="us,se" > <property name="name" value="小明"/> </bean>
3.import
一般用于团队的开发,它可以将多个配置文件,导入合并为一个。
不同的开发人员,有不同的beans,最后合并到一个applicationContext;
<?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="beans.xml"/> </beans>
在合并的时候,如果出现了同名且值i一样,那么就会产生覆盖。否则不会覆盖。
4.ref
意思就是:在实体类Address类中 new 一个对象叫做address2, 然后把new出来的address2赋值给实体类Student中属性名叫做address的。
<?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="address2" class="Com.Jsxs.pojo.Address"/> <bean id="student" class="Com.Jsxs.pojo.Student"> <!-- 第二种: Bean注入 ref--> <property name="address" ref="address2"/> </bean> </beans>
(六)、依赖注入
1.构造器注入
章节四就是构造器注入(有参构造就是,无参不是)
2.Set方式注入【重点】
- 依赖注入: Set注入
- 依赖: bean对象创建依赖于容器
- 注入:bean对象中的所有属性,由容器来注入。
(1).环境搭建
复杂类型
package Com.Jsxs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Address { private String address; }
真实测试对象
package Com.Jsxs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; @NoArgsConstructor @AllArgsConstructor @Data public class Student { private String name; private Address address; //类对象 private String[] books; //数组 private List<String> hobbys; // list集合 private Map<String,String> card; //键值 private Set<String> games; //set集合 private String wife; //null private Properties info; //配置 }
配置
<?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="student" class="Com.Jsxs.pojo.Student"> <!-- 普通的set 方法注入 --> <property name="name" value="吉士先生"/> </bean> </beans>
测试
import Com.Jsxs.pojo.Student; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); Student student = (Student) context.getBean("student"); System.out.println(student.getName()); } }
(2).开始真正实现
完善注入信息
<?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="address2" class="Com.Jsxs.pojo.Address"/> <bean id="student" class="Com.Jsxs.pojo.Student"> <!-- 第一种:普通注入 value--> <property name="name" value="吉士先生"/> <!-- 第二种: Bean注入 ref--> <property name="address" ref="address2"/> <!-- 第三种: 数组注入 --> <property name="books"> <array> <value>红楼梦</value> <value>西游记</value> <value>水浒传</value> <value>三国演义</value> </array> </property> <!-- 第四种: list注入 --> <property name="hobbys"> <list> <value>唱</value> <value>跳</value> <value>rap</value> </list> </property> <!-- 第五种: Map注入 --> <property name="card"> <map> <entry key="身份证" value="1234567894545"/> <entry key="银行卡" value="1234561235445"/> </map> </property> <!-- 第六种: Set注入 --> <property name="games"> <set> <value>CF</value> <value>CSGO</value> </set> </property> <!-- 第七种: NULL --> <property name="wife"> <null/> </property> <!-- 第八种: properties --> <property name="info"> <props> <prop key="user">root</prop> <prop key="password">121788</prop> </props> </property> </bean> </beans>
Student(name=吉士先生, address=Address(address=null), books=[红楼梦, 西游记, 水浒传, 三国演义], hobbys=[唱, 跳, rap], card={身份证=1234567894545, 银行卡=1234561235445}, games=[CF, CSGO], wife=null, info={user=root, password=121788})
3.扩展式注入
p命名是Set方式注入,需要无参构造和set方法;c命名就是构造器注入,需要有参构造函数。
(1).P标签命名空间
p 命名空间注入,可以直接注入属性的值:
xmlns:p="http://www.springframework.org/schema/p"
强转的操作,利用Class映射进行强转
User user = context.getBean("user",User.class);
实体类
package Com.Jsxs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private String name; private int age; }
配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" 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"> <!-- p: 标签命名空间 --> <bean id="user" class="Com.Jsxs.pojo.User" p:name="吉士先生" p:age="21"/> </beans>
测试
@Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("userBeans.xml"); User user = context.getBean("user",User.class); System.out.println(user); }
(2).C标签命名空间
C通过构造器注入;
xmlns:c="http://www.springframework.org/schema/c"
配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" 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"> <!-- p: 标签命名空间 --> <bean id="user" class="Com.Jsxs.pojo.User" p:name="吉士先生" p:age="21"/> <bean id="user2" class="Com.Jsxs.pojo.User" c:name="吉士先生" c:age="28"/> </beans>
(3).总结
- p命名是Set方式注入,需要无参构造和set方法;
- c命名就是构造器注入,需要有参构造函数。
- 用之前,别忘记导入约束
4.Bean作用域
(1).单列模式(默认为单列 singleton)
配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" 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="user2" class="Com.Jsxs.pojo.User" c:name="吉士先生" c:age="28"/> </beans>
测试
@Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("userBeans.xml"); User user = context.getBean("user2",User.class); User user1 = context.getBean("user2",User.class); System.out.println(user==user1); }