目录
6.3,拓展注入
我们可以使用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命名空间注入: p:属性="" 可以直接进行对象属性的注入 -->
<bean id="user" class="com.xiao.domain.User" p:name="小步" p:age="16"/>
<!-- c命名空间注入: 注入构造器参数 -->
<bean id="user02" class="com.xiao.domain.User" c:name="小七" c:age="13"/>
</beans>
测试:
import com.xiao.domain.Student;
import com.xiao.domain.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class beansTest {
@Test
public void test01(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = (Student) applicationContext.getBean("student");
System.out.println(student.toString());
}
@Test
public void test02(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("userbeans.xml");
User bean = applicationContext.getBean("user", User.class);
System.out.println(bean);
}
@Test
public void test03(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("userbeans.xml");
User bean = applicationContext.getBean("user02", User.class);
System.out.println(bean);
}
}
注意点:p命名和c命名不能直接使用需要导入约束!
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
6.4,bean的作用域
1.单例模式(Spring默认)
<bean id="user02" class="com.xiao.domain.User" c:name="小七" c:age="13" scope="singleton"/>
2.原型模式:每次从容器中get的时候产生一个新的对象!
<bean id="user02" class="com.xiao.domain.User" c:name="小七" c:age="13" scope="prototype"/>
3.其余的request,session,application,websocket这些只能在web中用到.
7.Bean的自动装配
- 自动装配是spring满足bean依赖的一种方式!
- spring会在上下文中自动寻找,并自动给bean装配属性!
在spring中有三种装配方式:
- 在xml中显示的配置
- 在java中显示的配置
- 隐式的自动装配bean[重要]
7.1,测试
1.环境搭建:一个人有两个宠物
7.2,ByName自动装配
<!--
byName:会自动在上下文中查找,和自己对象set方法后面的值对于的名称自动装配
-->
<bean id="people" class="com.xiao.domain.People" autowire="byName">
<property name="name" value="小步呀"/>
</bean>
7.7,ByType自动装配
<!--
byName:会自动在上下文中查找,和自己对象set方法后面的值对于的名称自动装配
byType: 会自动在上下文中查找, 和自己类型相同的bean自动装配(不推荐使用!)
-->
<bean id="people" class="com.xiao.domain.People" autowire="byType">
<property name="name" value="小步呀"/>
</bean>
小结:
- 在byName的时候需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性set方法的值一致!
- 在byType的时候必须要帮助bean的所有类型唯一,并且这个bean必须要和自动注入的属性类型一致!