一、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>
作者:怒吼的萝卜