Spring(1)之 (1.3_Spring Core)DI依赖注入 __1(对象依赖关系)

对象依赖关系:DI 依赖注入

1. 通过构造方法
2. 通过 set方法对属性注入【常用】
3. p名称空间,属性注入优化
4. 自动装配(了解)(不推荐使用:因为Spring提供的自动装配为了简化配置,但是不利于后期维护;)
5. 注解方式(网址: https://blog.csdn.net/qq_41029923/article/details/84103960 )

3. p名称空间进行属性注入,将属性注入优化( xml文件中文件头中要有 xmlns:p="http://www.springframework.org/schema/p" 这句; 之前属性注入:在< bean>中用< property>用 name="id"value="101" 属性; p名称空间< bean>中用 p:id="101"  p:name="Jack" p名称空间引用已经存在的 bean,< bean>中用  p:x-ref="x",如:userDao对象已存在,userService中需要注入 userDao对象属性,用 p:userDao-ref="userDao";)
4. 自动装配:(a. 根据名称字段装配:autowire="byName",自动IOC容器中找与属性同名的对象(即属性名 set方法和 bean中对象的 id要完全相同),每个< bean>中添加 autowire="byName",或者全局添加即< beans>中添加 default-autowire="byName"
  b. 根据类型装配:autowire="byType",IOC容器中只能有一个同类型对象,否则报错;也可在< beans>中添加 default-autowire="byType"进行全局定义。)

1. 通过构造方法
2. 通过 set方法对属性注入
(< bean>中< property>标签中利用 namevalue 属性:name属性是用 set方法,去掉 set再首字母小写,value是为 name的 set方法对应的属性赋值; < bean>中< property>标签中利用 nameref 属性:name属性是用 set方法,去掉 set再首字母小写,ref 引用已生成的 bean对象; 内部 bean:bean在内部,不需要 id,只能给外层的 bean使用,在外部不能使用了。)
1.1 User.java

public class User{  
	private int id;
	private String name;
	set、get(); 

	public User(){
		System.out.println("----对象被创建----");
		System.out.println("----无参构造----");
	}
	public User(int id,String name){
		System.out.println("----对象被创建----");
		System.out.println("----有参构造----");
		this.id=id; //
		this.name=name; //
	}
	public void init_user(){
	    	System.out.println("------对象初始化-----")
	}
	public void destory_user(){
	    	System.out.println("------对象销毁-----")
	}	  
}

1.2 bean.xml


    
    
    
    
    	
    	
    

    
    	
    
    
    	
    	
    
    
    
    
    	
    	
    
    


1.3 Test.java

public class Test{
	public static void main(String[] args) {
		/*得到IOC容器*/
		ApplicationContext ApplicationContext=new ClassPatnXmlApplicationContext("bean.xml");
		System.out.println("----得到IOC容器----");
		/*从容器中获取对象*/
		User user=(User)applicationContext.getBean("user3");
		System.out.println(user);
	}
}

 
 
2.1 UserAction.java

public class UserAction{
	private UserSerice userService;
	public void setUserService(UserService userService){
		this.userService=userService;
	}
	public String addUser(){
		userService.save();
		return null;
	}
}

2.2 UserService.java

public class UserService{
	private UserDao userDao;
	public void setUserDao(UserDao userDao){
		this.userDao=userDao;
	}
	public void save(){
		userDao.save();
	}
}

2.3 UserDao.java

public class UserDao{
	public void save(){
		System.out.println("保存到数据库");
	}
}

2.4 bean4.xml
(< bean>中< property>标签中利用 nameref 属性:name属性是用 set方法,去掉 set再首字母小写,ref 引用已生成的 bean对象;)


    
    
    
    	
    
    
    
    	
    
    
    
    
    
    
    	
    		//bean只能在内部使用,没有id
    			
    				
    			
    		
    	
    

2.5 Test.java

public class Test{
	public static void main(String[] args) {
		/*得到IOC容器*/
		ApplicationContext ApplicationContext=new ClassPatnXmlApplicationContext();
		/*从容器中获取对象*/
		UserAction userAction=(UserAction)applicationContext.getBean("userAction");//userAction2(内部bean)
		userAction.addUser();
	}
}

运行结果:
Spring(1)之 (1.3_Spring Core)DI依赖注入 __1(对象依赖关系)_第1张图片
3. p名称空间

xml文件中文件头中要有 xmlns:p="http://www.springframework.org/schema/p" 这句; 之前属性注入:在< bean>中用< property>用 name="id"value="101" 属性; p名称空间< bean>中用 p:id="101"  p:name="Jack" p名称空间引用已经存在的 bean,< bean>中用  p:x-ref="x",如:userDao对象已存在,userService中需要注入 userDao对象属性,用 p:userDao-ref="userDao";)

3.4 bean5.xml



    
    
    	//
      
        
    
    
    

  

3.5 Test.java

public class Test{
	public static void main(String[] args) {
		/*得到IOC容器*/
		ApplicationContext ApplicationContext=new ClassPatnXmlApplicationContext("bean5.xml");
		/*从容器中获取对象*/
		User user=(User) applicationContext.getBean("user");
		System.out.println(user);
		
		System.out.println("---------");
		UserAction userAction=(UserAction)applicationContext.getBean("userAction");
		userAction.addUser();

	}
}

Test.java 中直接输出user时运行结果:
Spring(1)之 (1.3_Spring Core)DI依赖注入 __1(对象依赖关系)_第2张图片
Test.java 中添加 userAction时运行结果:
Spring(1)之 (1.3_Spring Core)DI依赖注入 __1(对象依赖关系)_第3张图片
4. 自动装配
a. 根据名称字段装配:autowire="byName",自动IOC容器中找与属性同名的对象(即属性名 set方法和 bean中对象的 id要完全相同),每个< bean>中添加 autowire="byName",或者全局添加即< beans>中添加 default-autowire="byName"
  b. 根据类型装配:autowire="byType",IOC容器中只能有一个同类型对象,否则报错;也可在< beans>中添加 default-autowire="byType"进行全局定义。)

4.4 bean6.xml



    
    
    
    
    
    
    
    //
    
    
    
  

4.5 Test.java

public class Test{
	public static void main(String[] args) {
		/*得到IOC容器*/
		ApplicationContext ApplicationContext=new ClassPatnXmlApplicationContext("bean6.xml");
		/*从容器中获取对象*/
		UserAction userAction=(UserAction)applicationContext.getBean("userAction");
                userAction.addUser();
	}
}

运行结果:
Spring(1)之 (1.3_Spring Core)DI依赖注入 __1(对象依赖关系)_第4张图片

你可能感兴趣的:(#,Spring)