Spring:Spring-IOC三种注入方式、注入不同数据类型
一、Spring IOC(依赖注入的三种方式):
1、Setter方法注入
package com.jpeony.spring.setter; import com.jpeony.spring.common.HelloServiceImpl;
public class HelloWord {
private HelloService helloService; // setter方式注入Bean public void setHelloService(HelloService helloService) { this.helloService = helloService; } @Override public void selfIntroduction() { // 向大家打招呼 helloService.sayHello("大家好!"); } }
<?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"> <!-- Bean声明: 该bean类似于javaConfig中的@Bean注解; 用于创建bean的类通过class属性来指定,并且需要使用全限定的类名。 通过id指定bean的ID。如果不显示指定,默认使用class的全限定名进行命名。 eg: com.jpeony.spring.common.HelloServiceImpl#0,其#0是一个计数器的形式, 用来区分相同类型的其他bean。 使用自动化命名很方便,但是没有多少实际用处,还是建议自己给bean显示设定ID。 --> <bean id="helloService" class="com.jpeony.spring.common.HelloServiceImpl"/> <!-- setter注入bean --> <bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord"> <property name="helloService" ref="helloService"/> </bean> </beans>
2、构造方法注入
package com.jpeony.spring.setter; import com.jpeony.spring.common.HelloServiceImpl; public class HelloWord { private HelloService helloService; // 构造方法注入 public HelloWord (HelloService helloService) { this.helloService = helloService; } }
<?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"> <!-- Bean声明: 该bean类似于javaConfig中的@Bean注解; 用于创建bean的类通过class属性来指定,并且需要使用全限定的类名。 通过id指定bean的ID。如果不显示指定,默认使用class的全限定名进行命名。 eg: com.jpeony.spring.common.HelloServiceImpl#0,其#0是一个计数器的形式, 用来区分相同类型的其他bean。 使用自动化命名很方便,但是没有多少实际用处,还是建议自己给bean显示设定ID。 --> <bean id="helloService" class="com.jpeony.spring.common.HelloServiceImpl"/> <!-- 构造方法注入bean --> <bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord"> <constructor-arg><ref bean="helloService"/></constructor-arg> </bean> </beans>
3、P命名空间注入
package com.jpeony.spring.setter; import com.jpeony.spring.common.HelloServiceImpl; public class HelloWord { //名字 private String name; //年龄 private String age; //方法类 private HelloService helloService; public void setName (String name) { this.name = name; } public void setAge (String age) { this.age = age; } public void setHelloService(HelloService helloService) { this.helloService = helloService; } @Override public void selfIntroduction() { // 向大家打招呼 helloService.sayHello("我叫"+ name + ",今年" + age + "岁,大家好!"); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <!-- 引入p命名标签 --> xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="helloService" class="com.jpeony.spring.common.HelloServiceImpl"/> <!-- p标签注入bean --> <bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord" p:name="明明" p:age="24" p:helloService-ref="helloService"></bean> </beans>
P标签注入集合bean
package com.jpeony.spring.setter; import com.jpeony.spring.common.HelloServiceImpl; import java.util.List; public class HelloWord { //名字 private String name; //年龄 private String age; //方法类 private List<HelloService> helloServices; public void setName (String name) { this.name = name; } public void setAge (String age) { this.age = age; } public void setHelloServices(List<HelloService> helloServices) { this.helloServices = helloServices; } @Override public void selfIntroduction() { // 向大家打招呼 helloServices[0].sayHello("我叫"+ name + ",今年" + age + "岁,大家好!"); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <!-- 引入p命名标签 --> xmlns:p="http://www.springframework.org/schema/p" <!-- 引入util命名标签 --> xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="helloService" class="com.jpeony.spring.common.HelloServiceImpl"/> <bean id="helloService2" class="com.jpeony.spring.common.HelloServiceImpl"> ........... </bean> <util:list id="helloServices"> <ref bean="helloService"/> <ref bean="helloService2"/> </util:list> <!-- p标签注入bean --> <bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord" p:name="明明" p:age="24" p:helloServices-ref="helloServices"></bean> </beans>
二、Spring IOC(依赖注入的常用数据类型):
1、注入直接量(基本数据类型、字符串)
<bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord"> <property name="name" value="明明"></property> <property name="age" value="24"></property> </bean>
2、引用其他Bean组件(面向接口编程)
使用ref属性:
<bean id="helloService" class="com.jpeony.spring.common.HelloServiceImpl"/> <bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord"> <property name="helloService" ref="helloService"></property> </bean>
使用ref标签:
<bean id="helloService" class="com.jpeony.spring.common.HelloServiceImpl"/> <bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord"> <property name="helloService"> <ref bean="helloService" /> </property> </bean>
使用P命名空间:
<!-- 头文件加上这句 --> xmlns:p="http://www.springframework.org/schema/p" <bean id="helloService" class="com.jpeony.spring.common.HelloServiceImpl"/> <bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord" p:helloService-ref="helloService"></bean>
3、使用内部Bean
<bean id="HelloWord" class="com.jpeony.spring.setter.HelloWord"> <property name="helloService"> <bean class="com.jpeony.spring.common.HelloServiceImpl" /> </property> </bean>
4、集合类型的属性
// 对应的getter setter public class ALLCollection { private List listElement; private String[] arrayElement; private Set setElement; private Map mapElement; private Properties propsElement; public void setListElement (List listElement) { this.listElement = listElement; } public List getListElement () { return listElement; } public void setArrayElement (String[] arrayElement) { this.arrayElement= arrayElement; } public String[] getArrayElement () { return arrayElement; } public void setSetElement (Set setElement) { this.setElement= setElement; } public Set getSetElement () { return setElement; } public void setMapElement (Map mapElement) { this.mapElement= mapElement; } public Map getMaptElement () { return mapElement; } public void setPropsElement (Properties propsElement) { this.propsElement= propsElement; } public Properties getpropsElement () { return propsElement; } }
<bean id="collection" class="com.zxf.DO.ALLCollection"> <property name="listElement"> <list> <value>list苹果</value> <value>list香蕉</value> </list> </property> <property name="arrayElement"> <array> <value>array苹果</value> <value>array香蕉</value> </array> </property> <property name="setElement"> <set> <value>set苹果</value> <value>set香蕉</value> </set> </property> <property name="mapElement"> <map> <entry> <key><value>map1</value></key> <value>map苹果</value> </entry> <entry> <key><value>map2</value></key> <value>map香蕉</value> </entry> </map> </property> <property name="propsElement"> <props> <prop key="prop1">prop苹果</prop> <prop key="porp2">prop香蕉</prop> </props> </property> </bean>
文章整合至:https://blog.csdn.net/joe18576558921/article/details/80973385、https://www.cnblogs.com/DDiamondd/p/11398678.html
-----------------------------------
作者:怒吼的萝卜
链接:http://www.cnblogs.com/nhdlb/
-----------------------------------