您当前的位置: 首页 >  spring

Charge8

暂无认证

  • 3浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring IoC/DI和注解注入bean生命周期

Charge8 发布时间:2018-08-23 20:13:26 ,浏览量:3

一、简介

      Spring 的核心是控制反转(IoC)和面向切面(AOP)。

      Spring 官网:https://spring.io/projects/spring-framework

1、IoC:Inversion of Control(控制反转)

    控制反转是一个通用的概念,不是什么新技术而是一种设计思想,好比于MVC。

    其本意就是将原本程序中手动创建对象的控制权,交由 Spring框架来原理。

    其作用是创建对象并且维护对象之间的依赖关系,实现了程序的解耦合。

2、DI:Dependency Injection(依赖注入)

    依赖注入是指 Spring创建对象的过程中,将对象依赖的属性(常量,对象,集合)通过配置设值给该对象。

    Spring支持的依赖注入方式:xml配置注入( setter方法注入,构造方法注入等)和注解注入

3、Spring IoC容器(其原理:反射和内省机制)

      BeanFactory:生产 bean对象的工厂,Spring最底层的接口,只提供了IoC容器的功能:负责配置,创建和管理bean,被 Spring IoC容器管理的对象称为bean。Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化和装配。在应用中,一般不使用BeanFactory,而推荐使用 ApplicationContext(应用上下文)

     ApplicationContext 接口继承了BeanFactory接口,还提供了AOP集成、国际化处理等功能

4、BeanFactory与ApplicationContext创建bean的区别

     BeanFactory:需要等到获取某个bean的时候才会才会创建该bean,即延迟初始化

     ApplicationContext:在启动Spring容器时就会创建所有的bean(Web应用中推荐)

    在xml中也可以配置延迟 lazy-init

二、xml配置注入bean

1. setter方法注入

     指 IoC容器通过成员变量的 setter 方法来注入被依赖对象,使用 property标签。这种注入方式简单、直观,因而在 Spring 依赖注入里大量使用。

mvc 类

public class User {
	private int id;
	private String username;
	private String password;
	private Map map = new HashMap();
	private List list = new ArrayList(); 	// Set 类同 List

    ... 必须提供 setter 方法
}


public class UserServiceImpl implements UserService{
	//面向接口编程
	private UserDao userDao;

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

    ... 必须提供 setter 方法
}

配置文件:




	
		
		
                
			123
		
		
			
				
				
			
		
		
			
				lisi
				zs
			
		
	
	

	
		
	

测试类:

	@Test
	public void test() {
		// 1.初始化ioc容器(装对象的容器)
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
	
		//2.从容器中获得创建好的对象
		User user = context.getBean("user", User.class);
		System.out.println(user);
	}

-------
User [id=5, username=admin, password=>123
		
	
	

	
	
	

测试类:

	@Test
	public void test() {
		// 1.初始化ioc容器(装对象的容器)
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
	
		//2.从容器中获得创建好的对象
		UserServiceImpl userService = context.getBean("userService",UserServiceImpl.class);
		System.out.println(userService);
	}
------
UserServiceImpl [userDao=cn.jq.springdemo.dao.UserDaoImpl@13c27452, user=User [id=5, username=admin, password=>123
	            
关注
打赏
1664721914
查看更多评论
0.1161s