Spring配置和依赖注入
Spring配置
别名
<!-- 如果添加了别名,我们也可以使用其获取到这个对象-->
<alias name="user" alias="gg"/>
Bean的配置
<!-- name也是别名,可以取多个-->
<bean id="userT" class="com.kuang.pojo.UserT" name="userT2 u,u1;u2" >
<property name="name" value="sanni"/>
</bean>
import
一般用于团队开发使用,它可以将多个配置文件导入合并为一个
假设现在项目中有多个人开发,这三人复制不同的类开发,不同的类需要注册在不同的bean中,我们可以利用import将所有人的beans.xml合并为一个总的!(当导入时出现id相同状况时,相同id相同内容合并,相同id不同内容后来居上覆盖)
- applicationContext.xml
<import resource="beans.xml"/>
<import resource="beans2.xml"/>
<import resource="beans3.xml"/>
依赖注入
构造器注入
Set方法注入
- 依赖注入本质是Set注入
- 依赖:bean对象的创建依赖于容器
- 注入:bean对象中的所有属性,由容器来注入
- 环境搭建
1.复杂类型
2.真实测试对象public class Address { private String address; public String getAddress(){ return address; } public void setAddress(String address) { this.address = address; } }
3.beans.xmlpublic class Student { private String name; private Address address; private String[] books; private List<String> hobbies; private Map<String,String> card; private Set<String> games; private String wife; private Properties info; }
4.测试类<?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"> <!--使用spring来创建对象,在spring这些都称为bean--> <!-- 1,下标赋值 2参数类型string,不建议使用 --> <bean id="address" class="com.gy.pojo.Address"> <property name="address" value="西安"/> </bean> <bean id="student" class="com.gy.pojo.Student"> <!-- 第一种,普通值注入,value--> <property name="name" value="alice"/> <!--第二种,Bean注入,ref--> <property name="address" ref="address"/> <!--数组注入--> <property name="books"> <array> <value>红楼梦</value> <value>西游记</value> <value>水浒传</value> <value>三国演义</value> </array> </property> <!--List--> <property name="hobbies"> <list> <value>听歌</value> <value>敲代码</value> <value>看电影</value> </list> </property> <!--MAP--> <property name="card"> <map> <entry key="身份证" value="111111200011111111"/> <entry key="银行卡" value="1111111111111111111"/> </map> </property> <!--set--> <property name="games"> <set> <value>LOL</value> <value>CS</value> </set> </property> <!--NULL--> <property name="wife"> <null/> </property> <!--properties--> <property name="info"> <props> <prop key="学号">18100101120</prop> <prop key="性别">女</prop> <prop key="姓名">耿耿</prop> </props> </property> </bean> </beans>
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.toString()); // Student{ // name='alice', // address=Address{address='西安'}, // books=[红楼梦, 西游记, 水浒传, 三国演义], // hobbies=[听歌, 敲代码, 看电影], // card={身份证=111111200011111111, // 银行卡=1111111111111111111}, // games=[LOL, CS], wife='null', // info={学号=18100101120, 性别=女, 姓名=耿耿}} } }
扩展方式注入
我们可以使用p命令空间和c命令空间进行注入,需要导入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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--使用spring来创建对象,在spring这些都称为bean-->
<!--p命名空间注入,可以直接注入属性的值:properties-->
<!--p命名就是set方式注入,需要无参构造和set方法,c命名就是构造器注入,需要有参构造-->
<bean id="user" class="com.gy.pojo.User" p:name="alice" p:age="22"/>
<bean id="user2" class="com.gy.pojo.User" c:age="18" c:name="gy"/>
</beans>
Bean的作用域
1.单例模式(SPRING默认机制)
<bean id="user2" class="com.gy.pojo.User" c:age="18" c:name="gy" scope="singleton"/>
2.原型模式(prototype):每次从容器中get的时候,都会产生一个新对象。有些情况下所有线程要共享一个对象,对这个对象进行修改,那另一个线程过来也要修改,有两种方式,加锁和原型模式
3.其余的request、session、application只能在web开发使用