Spring-03 依赖注入(DI) 依赖注入(DI)
依赖注入(Dependency Injection,DI)。
依赖 : 指Bean对象的创建依赖于容器,Bean对象的依赖资源。
注入 : 指Bean对象所依赖的资源,由容器来设置和装配。
1.构造器注入这个是本博客文章Spring-02中的案例
2.Set方式注入 2.1 实体类 public class Address { private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } public class DataTest { private String name; private Address address; private String[] books; private List<String> hobbys; private Map<String,String> card; private Set<String> games; private String wife; private Properties info; public void setName(String name) { this.name = name; } public void setAddress(Address address) { this.address = address; } public void setBooks(String[] books) { this.books = books; } public void setHobbys(List<String> hobbys) { this.hobbys = hobbys; } public void setCard(Map<String, String> card) { this.card = card; } public void setGames(Set<String> games) { this.games = games; } public void setWife(String wife) { this.wife = wife; } public void setInfo(Properties info) { this.info = info; } public void show(){ System.out.println("name="+ name + ",address="+ address.getAddress() + ",books=" ); for (String book:books){ System.out.print("<<"+book+">>\t"); } System.out.println("\n爱好:"+hobbys); System.out.println("card:"+card); System.out.println("games:"+games); System.out.println("wife:"+wife); System.out.println("info:"+info); } } 2.2 常量注入 <bean> <property value="zc"></property> </bean> 2.3 Bean注入 <bean> <property value="河南"/> </bean> <bean> <property ref="address"/> </bean> 2.4 数组注入 <bean> <property> <array> <value>西游记</value> <value>三体</value> <value>老人与海</value> </array> </property> </bean> 2.5 List注入 <bean> <property> <list> <value>听歌</value> <value>看电影</value> <value>爬山</value> </list> </property> </bean> 2.6 Map注入 <bean> <property> <map> <entry key="中国邮政" value="1000"/> <entry key="建设" value="2000"/> </map> </property> </bean> 2.7 set注入 <bean> <property> <set> <value>AOA</value> <value>BOB</value> <value>COC</value> </set> </property> </bean> 2.8 Null注入 <bean> <property > <null/> </property> </bean> 2.9 Properties注入 <bean> <property> <props> <prop key="driver">123456</prop> <prop key="url">123456</prop> <prop key="username">123465</prop> <prop key="password">123456</prop> </props> </property> </bean> 2.10 测试 @Test public void Test(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); DataTest dataTest = (DataTest) context.getBean("DataTest"); dataTest.show(); } 3.拓展方式注入 3.1 P命名空间注入头文件中加入约束文件:在配置文件头部
xmlns:p="http://www.springframework.org/schema/p"注入
<bean p:name="zc" p:age="20"/> 3.2 C命名空间注入头文件中加入约束文件:在配置文件头部
xmlns:c="http://www.springframework.org/schema/c"注入
<bean c:name="zc" c:age="20"/>这个时候会爆红,因为缺少有参构造器,这个方式也就是构造器注入
3.3 测试 @Test public void Test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); User user = (User) context.getBean("user"); System.out.println(user); } Bean的作用域 作用域 描述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环境。
几种作用域中,request、session作用域仅在基于web的应用中使用,只能用在基于web的Spring ApplicationContext环境。
1.Singleton