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框架是很智能的
即所有的都与容器来交互而不与对象进行交互。
对于在构造函数含有多个相同类型的参数时,我们使用构造函数的方法来构造时是按照参数的顺序来进行构造的。
如:
在这里插入图片描述
在xml文件中:
在这里插入图片描述
运行结果:可以看到是按顺序来的
在这里插入图片描述

开始完成一个项目

首先,讲项目的目录建立起来
在这里插入图片描述
然后要理解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的方式来进行。
在这里插入图片描述
最后,则是进行调用生成实例
在这里插入图片描述
完成了以上后,就可以对一般的项目开发步骤有所了解了。
而这种构造方法的方式在我们开发项目中是不常用的,我们大多使用的是set的方式来进行构造。
在这里插入图片描述
但大家可以发现,在我们的实际项目中,如果是这样进行依赖装配注入的话,势必是很麻烦的,那么有什么好用办法呢?

猜你喜欢

转载自blog.csdn.net/pengxiang1998/article/details/113039925