Spring的依赖注入方式

Spring的依赖注入方式

  • 设值注入(底层通过反射调用set方法)
    1.普通属性注入(基本数据类型和字符串类型)
<bean id="star" class="com.hxh.pojo.Star">
        <!--基本数据类型和字符类型用value属性赋值-->
        <property name="id" value="14"></property>
        <property name="name" value="小白白"></property>
     </bean>

2.域属性注入
基本数据类型和字符串用value赋值,域属性(对象属性)用ref

<bean id="partner" class="com.hxh.pojo.Partner">
        <property name="pname" value="宋轶"></property>
    </bean>
    <bean id="star" class="com.hxh.pojo.Star">
        <property name="id" value="15"></property>
        <property name="name" value="胡歌"></property>
        <!--自定义类型用ref-->
        <property name="partner" ref="partner"></property>
    </bean>

3.p命名空间注入

<!--p命名空间注入-->
    <bean id="partner" class="com.hxh.pojo.Partner">
        <property name="pname" value="赵露思"></property>
    </bean>
    <bean id="star" class="com.hxh.pojo.Star" p:id="16" p:name="肖战" p:partner-ref="partner"></bean>

4.集合属性注入

    private String[] myArrays;
    private Set<String> mySets;
    private List<Partner> myLists;
    private Map<String,Object> maps;
    private Properties myProps;

注册相对应的bean

 <bean id="someColltion" class="com.hxh.pojo.SomeColltion">
        <property name="myArrays">
            **<array>**
                <value>京东</value>
                <value>阿里巴巴</value>
                <value>腾讯</value>
            </array>
        </property>
        <property name="mySets">
            **<set>**
                <value>Java工程师</value>
                <value>运营</value>
                <value>数据分析师</value>
            </set>
        </property>
        <property name="myLists">
            **<list>**
                <ref bean="partner"></ref>
            </list>
        </property>
        <property name="maps">
            **<map>**
                *<entry key*="qq" **value**="666"></entry>
                <entry key="微信" value="182340807790"></entry>
            </map>
        </property>
        **同map  但是要将值写在标签之间**
        <property name="myProps">
            **<props>**
                <prop **key="email"**>
                    666@qq.com
                </prop>
            </props>
        </property>
    </bean>

5.域属性自动注入

  • byName:要求注入的bean的id必须和被注入的对象的属性名一致
<bean **id="partner"** class="com.hxh.pojo.Partner">
        <property name="pname" value="古力娜扎"></property>
    </bean>
    <bean id="star" class="com.hxh.pojo.Star" **autowire="byName"**>
        <property name="id" value="18"></property>
        <property name="name" value="小仙女"></property>
    </bean>
  • byType:容器中与注入的bean的类型具有is-a关系的类只能有一个,就是不能具有继承关系或实现关系
<bean id="partner" class="com.hxh.pojo.Partner">
        <property name="pname" value="古力娜扎"></property>
    </bean>
    <bean id="star" class="com.hxh.pojo.Star" **autowire="byType"**>
        <property name="id" value="18"></property>
        <property name="name" value="小仙女"></property>
    </bean>
  • 构造注入(底层带参构造器完成注入)
    1.在被注入的bean中提供带参构造器
    2.构造注入
<bean id="partner" class="com.hxh.pojo.Partner">
        <property name="pname" value="宋轶"></property>
    </bean>
    <bean id="star" class="com.hxh.pojo.Star">
        **<constructor-arg** name="id" value="19"></constructor-arg>
        <constructor-arg name="name" value="小白"></constructor-arg>
        <constructor-arg name="partner" ref="partner"></constructor-arg>
    </bean>

除了name属性还有type属性:type指的是构造器中参数的类型,为类型的全限定路径

<bean id="star" class="com.hxh.pojo.Star">
        <constructor-arg type=**"java.lang.Integer**" value="19"></constructor-arg>
        <constructor-arg type="java.lang.String" value="小白"></constructor-arg>
        <constructor-arg type="com.hxh.pojo.Partner" ref="partner"></constructor-arg>
    </bean>

index属性:index是构造器中的参数的索引号,从0开始;

<bean id="star" class="com.hxh.pojo.Star">
        <constructor-arg **index="0"** value="19"></constructor-arg>
        <constructor-arg index="1" value="小白"></constructor-arg>
        <constructor-arg index="2" ref="partner"></constructor-arg>
    </bean>

直接写name属性,顺序必须和构造器中的顺序一致,可读性较差

<bean id="star" class="com.hxh.pojo.Star">
        <constructor-arg  value="19"></constructor-arg>
        <constructor-arg  value="小白"></constructor-arg>
        <constructor-arg  ref="partner"></constructor-arg>
    </bean>

以上第一种较为常用

  • 基于注解注入
    1.环境搭建:导入aop包、添加context约束头信息(组件扫描器)
    在这里插入图片描述
    2.常用注解:@Component、@Scope、@Value、@Resource、@Autowired
/**
* 与@Component具有相同功能的还有其他三个注解
* @Repository:该注解添加在DAO实现类上
* @Service:该注解添加在Service实现类上
* @Controller:该注解添加在Controller类上
*
*/
@Component("myStar") //表明当前类是spring容器中的组件,它的生命周期交给spring管理.其中myStar相当于<bean/>中的id属性
@Scope("prototype")
public class Star {
       @Value("25") //普通属性的注入
       private int age;
       @Value("郭靖")
       private String name;
       //关联属性
       //@Resource 域属性注入
       //@Autowired //域属性注入 :byType方式
       @Autowired
       @Qualifier("myPartner") //byName方式
       private Partner partner;
       @Override
       public String toString() {
               return "Star [age=" + age + ", name=" + name + ", partner=" + partner + "]";
       }
       
}

配置文件中注册主键扫描器

<!--注册主键扫描器-->
    <**context:component-scan** base-package="com.hxh.pojo"></context:component-scan>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值