applicationContestdi.xml
<bean id="car" class="cn.happy.springdi.entity.Car"> <property name="barend" value="兰博基尼"></property> <property name="color" value="红色"></property> </bean> <!--构造植入--> <bean id="stu" class="cn.happy.springdi.entity.Student"> <constructor-arg index="0" value="小小"></constructor-arg> <constructor-arg index="1" value="21"></constructor-arg> <constructor-arg index="2" ref="car"></constructor-arg> </bean>
private String[] array; private List<String> list; private Set<String> set; Map<String,String> map; Properties properties;
<!--集合注入Array--> <bean id="array" class="cn.happy.springdi.collect.Mycolleaction"> <property name="array"> <array> <value>12</value> <value>12</value> </array> </property> </bean> <!--list--> <bean id="list" class="cn.happy.springdi.collect.Mycolleaction"> <property name="list"> <list> <value>卡卡</value> <value>啦啦</value> </list> </property> </bean> <!--set--> <bean id="set" class="cn.happy.springdi.collect.Mycolleaction"> <property name="set"> <set> <value>卡卡</value> <value>啦啦</value> </set> </property> </bean> <!--Map--> <bean id="map" class="cn.happy.springdi.collect.Mycolleaction"> <property name="map"> <map> <entry key="001" value="娜娜"></entry> <entry key="002"> <value>乐乐</value> </entry> </map> </property> </bean> <!--properties--> <bean id="properties" class="cn.happy.springdi.collect.Mycolleaction"> <property name="properties"> <props> <prop key="001">啦啦</prop> <prop key="002">lel</prop> </props> </property> </bean>
测试:
@Test public void Test01(){ ApplicationContext app=new ClassPathXmlApplicationContext("applicationContestdi.xml"); Student stu= (Student) app.getBean("stu"); System.out.println(stu); }
测试结果: Student{name='小小', age=21, car=Car{barend='兰博基尼', color='红色'}}
P命名空间的特点:使用属性而不是子元素的形式配置Bean的属性,从而简化配置代码;
xmlns:p="http://www.springframework.org/schema/p"
<!--p命名空间-->
<bean id="stu" class="cn.happy.springdi.entity.Student" p:name="12" p:age="12" ></bean>
注解:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!--开启包扫描器--> <context:component-scan base-package="cn.happy.springdi.pringannotion"></context:component-scan> </beans>Car类:
@Value("兰博基尼") private String brand; @Value("紫色") private String color; @Override public String toString() { return "Car{" + "brand='" + brand + '\'' + ", color='" + color + '\'' + '}'; }
Student类:
//使用了Component,默认名称是类名首字母小写作为Spring中的对象名 @Component("student") public class Student { @Value("lala") //setXXX设置注入 ,反射机制 private String name; @Value("18") private int age; // @Resource(name="car") //注入:byName byType JDK注解 @Autowired @Qualifier("car") private Car car; @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", car2=" + car + '}'; }
测试:
@Test public void xmlid(){ ApplicationContext app=new ClassPathXmlApplicationContext("applicationContestdizhujie01.xml"); Student student= (Student) app.getBean("student"); System.out.println(student); } }测试结果:
Student{name='lala', age=18, car2=Car{brand='兰博基尼', color='紫色'}}
基于注解的DI:
注解 @overide 标识这个方法一定来源于父类
@Repository 仓库 dao层
@service biz 业务逻辑层
@controller action 处理器层,调度请求
@Resoure 在一个类中注入域属性
@value 在一个类中注入普通属性值
@Autowired 在一个类中注入域属性
Spring默认生成的bean都是单例的
<bean scope="prototype(多例)/singleton(单例)"></bean>
当@Resource没有显示提示名字的信息,如果根据默认名字找不到对应的Spring管理对象,注入机制回滚至类型匹配,如果刚好只有一个Spring管理对象,符合改依赖的类型,那么它会被注入通过设置CommonAnnatationBeanPostProcessor的fallbackToDefaultTypeMath属性为false(默认值是true)可以禁用这一特性。