spring实例化bean有两种方式,第一种是通过配置文件注入,例如(这里只介绍通过setter方式)
<bean id="a" class="com.demo.A"></bean>
如果有多个bean需要依赖的话,则需要这么写:
<bean id="a" class="com.demo.A"> <property name="b" ref="b"></property> </bean> <bean id="b" class="com.demo.B"></bean>
接下来就要编写实现类了:
public class A { private B b; public B getB() { return b; } public void setB(B b) { this.b = b; } public void out(){ b.out(); } }
public class B { public void out(){ System.out.println("hello world"); } }
public class Test { private A a; public A getA() { return a; } public void setA(A a) { this.a = a; } a.out(); }
第二种就是通过注解,这种方式可以极大的简化配置文件,这里我只说一种注解demo
在需要spring注入的类中加入注释@Repository、@Service等(如果忘记加入此注释,运行时会出现java.lang.NullPointerException异常),这是我们还要注意,因为要在bean A中调用bean B,因为我们是再调用A的时候才会自动注入A,所以此时B是不会被注入的,这时执行到b.out()时就会出现java.lang.NullPointerException异常,但只要我们在声明B的时候加上@Autowired就可以避免这种情况发生
@Service public class A { @Autowired private B b; public B getB() { return b; } public void setB(B b) { this.b = b; } public void out(){ b.out(); } }
@Repository public class B { public void out(){ System.out.println("hello world"); } }
public class Test { private A a; public A getA() { return a; } public void setA(A a) { this.a = a; } a.out(); }
接下来就需要修改配置文件了,在学习spring的过程中经常被一些配置文件弄的晕头转向,不同版本的spring配置内容也不尽相同,这里我列举必须的配置信息(spring版本为3.2.4)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context-3.1.xsd">
9 <context:component-scan base-package="com" /> 10 </beans>