并不是所有的人都喜欢用xml来配置spring,尤其是那些没学过xml或者讨厌xml的人。因此spring出现了一种基于java(就是通过写java代码来配置)的配置方法。
我在上次说过,springIOC容器,就是一个键值对的map,而且spring本来就是用java写的,因此用java来进配置,就是相当于新建一个实例放入这个springIOC容器当中,这和我们平常写代码非常相似。
言归正传,使用java风格的第一步就是配置xml,。。。。我也无语了。
但是这个配置非常简单。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<!--这个liu就是你使用spring的包名-->
<context:component-scan base-package="liu"/>
</beans>
然后定义一个配置类:
比如在我的工程下有一个A类,我需要对A类进行注入,那么在配置类中就可以这样写。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig{
@Bean
public A a(){
return new A();
}
}
@Configuration:这个注释必须有,在spring扫描包的时候,扫描到这个注解就会把这个类当成配置类。也就相当于配置文件当中的一样
@Bean:注入一个bean,也就是相当于配置文件当中的一样
A:放回类型对应着中的class
a方法名:对应着中的id
有的人说这样弄比配置有什么优势?
优势在于注入值的时候。
比如A是这样的
public class A{
private int num;
public A(int num){
this.num=num;
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig{
@Bean
public A a(){
return new A(10);
}
}
你可以写成上面这样。
当然也可以是set注入:
public class A{
private int num;
public void setNum(int num){
this.num=num;
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig{
@Bean
public A a(){
A aa=new A();
aa.setNum(10);
return aa;
}
}
还有通过引用来进行注入
public class A{
private B b;
public void setB(B b){
this.b=b;
}
}
public class B{
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig{
@Bean
public B b(){
return new B();
}
@Bean
public A a(){
A aa=new A();
aa.setB(b());
return aa;
}
}
剩下的大家举一反三,比起配置文件方便了很多吧,尤其是注入复杂的参数的时候。