spring怎么注入对象?spring注入对象方式

阳光 2022-06-09 19:00:58 java常见问答 8887

当我们在开发中需要用一个类调用一个成员对象,成员对象也是被容器类托管的类对象时,那我们可以用依赖注入创建成员对象,spring就可以完成这件事,那spring怎么注入对象?下面来我们就来给大家讲解一下。

spring怎么注入对象.jpg

1.set注入:

这是最简单的注入方式,假设有一个SpringAction,类中需要实例化一个SpringDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建SpringDao的set方法(这是ioc的注入入口):

package com.bless.springdemo.action;
public class SpringAction
{
    //注入对象springDao  
    private SpringDao springDao;
    //一定要写被注入对象的set方法  
    public void setSpringDao(SpringDao springDao)
    {
        this.springDao = springDao;
    }
    public void ok()
    {
        springDao.ok();
    }
}

随后编写spring的xml文件,中的name属性是class属性的一个别名,class属性指类的全名,因为在SpringAction中有一个公共属性Springdao,所以要在标签中创建一个标签指定SpringDao。标签中的name就是SpringAction类中的SpringDao属性名,ref指下面,这样其实是spring将SpringDaoImpl对象实例化并且调用SpringAction的setSpringDao方法将SpringDao注入:

<!--配置bean,配置后该类由spring管理-->  
    <bean name="springAction" class="com.bless.springdemo.action.SpringAction">  
        <!--(1)依赖注入,配置当前类中相应的属性-->  
        <property name="springDao" ref="springDao"></property>  
    </bean> <
bean name = "springDao"
class = "com.bless.springdemo.dao.impl.SpringDaoImpl" > </bean>

2.构造器注入:

这种方式的注入是指带有参数的构造函数注入,看下面的例子,我创建了两个成员变量SpringDao和User,但是并未设置对象的set方法,所以就不能支持第一种注入方式,这里的注入方式是在SpringAction的构造函数中注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来:

public class SpringAction
{
    //注入对象springDao  
    private SpringDao springDao;
    private User user;
    public SpringAction(SpringDao springDao, User user)
    {
        this.springDao = springDao;
        this.user = user;
        System.out.println("构造方法调用springDao和user");
    }
    public void save()
    {
        user.setName("卡卡");
        springDao.save(user);
    }
}

在XML文件中同样不用的形式,而是使用标签,ref属性同样指向其它标签的name属性:

<!--配置bean,配置后该类由spring管理-->  
    <bean name="springAction" class="com.bless.springdemo.action.SpringAction">  
        <!--(2)创建构造器注入,如果主类有带参的构造方法则需添加此配置-->  
        <constructor-arg ref="springDao"></constructor-arg>  
        <constructor-arg ref="user"></constructor-arg>  
    </bean> <
bean name = "springDao"
class = "com.bless.springdemo.dao.impl.SpringDaoImpl" > </bean> <
    bean name = "user"
class = "com.bless.springdemo.vo.User" > </bean>

解决构造方法参数的不确定性,你可能会遇到构造方法传入的两参数都是同类型的,为了分清哪个该赋对应值,则需要进行一些小处理:

下面是设置index,就是参数位置:

<bean name="springAction" class="com.bless.springdemo.action.SpringAction">  
        <constructor-arg index="0" ref="springDao"></constructor-arg>  
        <constructor-arg index="1" ref="user"></constructor-arg>  
    </bean>

另一种是设置参数类型:

<constructor-arg type="java.lang.String" ref=""/>

spring注入对象可以使用set注入以及构造器注入,这也是在开发中常见的注入方式,我们多练多研究就能将其中的“奥秘”解决啦!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

java内存泄漏如何排查?什么原因造成内存泄漏?

javaidea怎么更换背景颜色?idea怎么创建java项目?

java工程师怎么区分考级?java工程师不同等级要掌握哪些知识?