spring 基于java的注入

并不是所有的人都喜欢用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;
    }
}

剩下的大家举一反三,比起配置文件方便了很多吧,尤其是注入复杂的参数的时候。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章