4.Spring 依赖注入
构造器注入
<!--第一种有参构造,通过下标进行赋值-->
<bean id="user" class="com.yuan.entity.User">
<constructor-arg index="0" value="小黑"/>
</bean>
<!--第二种 不推荐使用 通过类型创建-->
<bean id="user" class="com.yuan.entity.User">
<constructor-arg type="java.lang.String" value="兄白"/>
</bean>
<!--第三种通过参数名来设置-->
<bean id="user" class="com.yuan.entity.User">
<constructor-arg name="name" value="xiaobai"/>
</bean>
set方式注入【重点】
依赖注入: Set注入!
依赖: bean对象的创建依赖于容器!
注入: bean对象中的所有属性,由容器来注入!
Student
private String name;
private Address address;
private String[] books;
private List<String> hobbys;
private Map<String,String> card;
private Set<String> gnames;
private String wife;
private Properties info;
beans.xml
<bean id="address" class="com.yuan.entity.Address">
<property name="address" value="aaa"/>
</bean>
<bean id="student" class="com.yuan.entity.Student">
<!--name实体类的名称-->
<!--第一种 普通注入-->
<property name="name" value="小黑"/>
<!--第二中引入注入-->
<property name="address" ref="address"/>
<!--数组注入-->
<property name="books">
<array>
<value>红楼梦</value>
<value>西游记</value>
<value>水浒传</value>
<value>三国演义</value>
</array>
</property>
<!--list-->
<property name="hobbys">
<list>
<value>小黑</value>
<value>小白</value>
<value>小红</value>
</list>
</property>
<!--map-->
<property name="card">
<map>
<entry key="身份证" value="12345678901234568"/>
<entry key="手机号码" value="13787873434"/>
</map>
</property>
<!--set-->
<property name="gnames">
<set>
<value>abc</value>
<value>ddb</value>
<value>bbb</value>
<value>aaa</value>
</set>
</property>
<!--null-->
<property name="wife">
<null/>
</property>
<!--Properties-->
<property name="info">
<props>
<prop key="driver">com.mysql.cj.jdbc.Driver</prop>
<prop key="url">jdbc:mysql://localhost:3306/studentdb?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong</prop>
<prop key="username">root</prop>
<prop key="password">root</prop>
</props>
</property>
</bean>
其他方式注入
可以使用P命名空间 或者C命名空间
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--p命名空问注入,可以直接注入属性的值:property-->
<bean id="user" class="com.yuan.entity.User" p:name="哈哈哈" p:age="18"/>
<!--c命名空问注入,通过构造器注入注入属性的值:: construct-args-->
<bean id="user2" class="com.yuan.entity.User" c:name="啦啦啦" c:age="12"/>
</beans>
测试
ApplicationContext context = new ClassPathXmlApplicationContext("Userbeans.xml");
User user = context.getBean("user2", User.class);
System.out.println(user);
注意点,需要导入xml约束
p命名空间
xmlns:p="http://www.springframework.org/schema/p"
c命名空间
xmlns:c="http://www.springframework.org/schema/c"
bean作用域
单例模式:(Spring默认机制)
<bean id="user2" class="com.yuan.entity.User" c:name="啦啦啦" c:age="12" scope="singleton"/>
原型模式:(每次容器中get 的时候都会产生一个新的对象)
<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>
其余的resquest,application,session,这些只能在web开发中使用!
作用域 描述 singleton 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。 prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。 request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。 session 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。 application 限定一个Bean的作用域为ServletContext的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。