0
点赞
收藏
分享

微信扫一扫

Spring容器注入对象的两种方法:构造函数与set属性值以及构造简单的项目搭建


在Spring中,容器注入对象的方法主要有两种,分别是构造函数注入方式与set方法注入方式,其中构造函数方法可以根据参数索引,类型和名称来适配。
实体类 Student.java

public class Student {
private String message;

public void setMessage(String message) {
this.message = message;
}
public Student(){
System.out.println("Student对象实例化");
}
public Student(String name){
System.out.println("Student对象实例化 name="+name);
}
public Student(int i,String name){
System.out.println("Student对象实例化");
System.out.println("i="+i+" name="+name);
}
public void printmessage(){
System.out.println(message);
}

}

构造函数注入方式:

<!-- 配置要管理的bean 无参构造 -->
<bean name="stun" id="stu" class="com.java.demo.Student"></bean>
<!-- 配置一个根据参数值创建bean实例的方式jedis 会用到 -->
<bean name="stu1" class="com.java.demo.Student">
<!-- 通过构造函数的类型,名称,索引来适配 -->
<!-- 通过索引来智能匹配 -->
<constructor-arg index="0" value="10"></constructor-arg>
<constructor-arg index="1" value="10"></constructor-arg>
</bean>
<bean name="stu2" class="com.java.demo.Student">

<!-- 通过类型来智能匹配 -->
<constructor-arg type="int" value="12"></constructor-arg>
<constructor-arg type="String" value="12"></constructor-arg>
</bean>
<bean name="stu3" class="com.java.demo.Student">

<!-- 通过名称来智能匹配 -->
<constructor-arg name="i" value="13"></constructor-arg>
<constructor-arg name="name" value="13"></constructor-arg>
</bean>

通过set方法来注入:对message属性进行赋值 即依靠属性方法来注入

<bean name="stu4" class="com.java.demo.Student">
<property name="message" value="初始的信息"></property>
</bean>

调用生成 TestStudent.java

public static void main(String[] args) {
// TODO Auto-generated method stub
//Student stu=new Student();
//实例化spring容器放到spring中存储,xml是一个工厂,吧容器中需要管理的bean实例存储到map集合中
ApplicationContext ctx=new ClassPathXmlApplicationContext("container.xml");//需要一个参数获取sping配置的路径
//Map<String,Object>就是key对应bean的id或name value就是class属性值反射生成的对象

Student stu=(Student) ctx.getBean("stu4");
stu.printmessage();
}

注:

当然在使用构造函数的同时使用set方法也是可以的。当然即使我们讲set方法写在前面,肯定也是通过先调用构造方法之后再进行set值的,即顺序无所谓,相信Spring框架是很智能的

即所有的都与容器来交互而不与对象进行交互。

对于在构造函数含有多个相同类型的参数时,我们使用构造函数的方法来构造时是按照参数的顺序来进行构造的。

如:

Spring容器注入对象的两种方法:构造函数与set属性值以及构造简单的项目搭建_java


在xml文件中:

Spring容器注入对象的两种方法:构造函数与set属性值以及构造简单的项目搭建_构造函数_02


运行结果:可以看到是按顺序来的

Spring容器注入对象的两种方法:构造函数与set属性值以及构造简单的项目搭建_构造函数_03

开始完成一个项目

首先,讲项目的目录建立起来

Spring容器注入对象的两种方法:构造函数与set属性值以及构造简单的项目搭建_spring_04


然后要理解Spring的使用,我们需要与原本的开发思路做对比:

UserDaoImpl.java

public class UserDaoImpl implements UserDao{
public UserDaoImpl(){
System.out.println("USerDaoImpl-instance");
}

@Override
public void addUser() {
// TODO Auto-generated method stub
System.out.println("添加用户信息-->到DB");
}

}

UserServiceImpl.java

public class UserServiceImpl implements UserService{
//UserDao user=new UserDaoImpl();//在spring框架中IOC方式是不使用这种方式的
private UserDao userdao;//这是通过属性的方式来注入
public UserServiceImpl(){ //这是构造函数
System.out.println("service-instance");//无参构造
}
public UserServiceImpl(UserDao userDao){
//这是构造函数
System.out.println("service-instance");
this.userdao=userDao;
}
public void saveUser(){
userdao.addUser();
}

}

可以看到,我们在原本的开发中会将UserDao对象生成然后进行调用,但是在使用了Spring后,我们需要使用依赖注入的方式来进行,那么我们可以使用构造方法或者set的方式来进行。

Spring容器注入对象的两种方法:构造函数与set属性值以及构造简单的项目搭建_java_05


最后,则是进行调用生成实例

Spring容器注入对象的两种方法:构造函数与set属性值以及构造简单的项目搭建_构造函数_06


完成了以上后,就可以对一般的项目开发步骤有所了解了。

而这种构造方法的方式在我们开发项目中是不常用的,我们大多使用的是set的方式来进行构造。

Spring容器注入对象的两种方法:构造函数与set属性值以及构造简单的项目搭建_spring_07


但大家可以发现,在我们的实际项目中,如果是这样进行依赖装配注入的话,势必是很麻烦的,那么有什么好用办法呢?


举报

相关推荐

0 条评论