控制反转IOC、Bean的作用域、Bean的装配

spring IOC所需的包

链接:https://pan.baidu.com/s/1a18GS_uDqX6UpdU0_3_CQw 
提取码:hrku 
 

控制反转IOC(Inversion of control)

定义:把对象的创建,初始化,销毁等工作交给spring容器来做,由spring容器来管理对象的生命周期。

  • ioc不是一种技术,只是一种开发思想,一种重要的面向对象编码的法则。可以设计出松耦合,更加优良的程序。
  • ioc包括俩部分:依赖注入(DI)和 依赖查找
  • spring的注入理解:就是在实例化这个类的时候,由外部容器来设置这个对象的值 

属性的注入: 

public class User {
	
	private int id;
	
	private String name;
	
	private List scores;
	
	private Map info;


    //.....getter和setter方法
}

在applicationContext.xml中: 


		
		
		
		
			
				110
				20
			
		
		
			
				
				
			
		
	

如何使用呢?

public void IOCTest() {
		//加载spring容器
		ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//获取实例
		User user= app.getBean("user",User.class);
		
		System.out.println(user.toString());
	}

引用外部类 

	
		
	
	
	
		
	

 

Bean的作用域:

通过bean的scope进行配置

	
		
	

1.singleton:单例模式(缺省默认),spring容器中只存在一个实例

2.prototype:原型模式,每次通过spring容器获取bean时,容器会创建一个新的实例进行返回

3.request:在同一个请求中,获取的时同一个实例,不同的请求获取的是不同的实例

4.session:同一次会话中,获取的是同一个实例....

Bean的装配

1.配置文件xml的装配方式

简单的实际应用案例:

控制反转IOC、Bean的作用域、Bean的装配_第1张图片

userDao和userService没什么新东西,重点看实现类

userserviceimpl中:

package com.cbb.service.impl;

import com.cbb.dao.UserDao;
import com.cbb.dao.impl.UserDaoImpl;
import com.cbb.service.UserService;

public class UserServiceImpl implements UserService{
	
	//private UserDao userDao = new UserDaoImpl();
	private UserDao userDao;
	@Override
	public void login() {
		// TODO Auto-generated method stub
		System.err.println("service....login....");
		userDao.login();
	}
	
	
	
	public UserDao getUserDao() {
		return userDao;
	}
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	
}

在userController 

package com.cbb.controller;

import com.cbb.service.UserService;
import com.cbb.service.impl.UserServiceImpl;

public class UserController {
	
	//private UserService userService = new UserServiceImpl();
	private UserService userService;
	
	public void login() {
		System.err.println("controller......login.....");
		userService.login();
	}

	public UserService getUserService() {
		return userService;
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	}
	
	
}

重点:配置文件applicationContext.xml中



	
	
		
	
	
		
	
	

注意俩点:

  1. 属性注入需要有对应的setter方法
  2. 必需要有无参构造方法

2.注解的装配方式

除了已用的ioc包还需要spring-aop包

链接:https://pan.baidu.com/s/1WHP0l4flOvxQBx1lcd-VgA 
提取码:5i3l 

xml文件中:注意头部文件变了



	
	
	


 代码中的注释规则:5个注释,头四个可以混用,只不过不够不规范

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import com.cbb.dao.UserDao;
//以下四个注解共同的作用:注解到springbean中的注解,要注解到 类 的头上;
//默认bean的名字为首字母小写的类名,比如本例“userDaoImpl”,自己起名字@Repository("userdao")
/*@Component  //是组件的通用形式。
@Controller //控制层,表示web组件
@Service    //业务逻辑层
*/
@Repository //持久层
public class UserServiceImpl implements UserService{
	
	//private UserDao userDao = new UserDaoImpl();
	
	@Autowired  //1.按照类型进行装配  2.无需setter方法
	private UserDao userDao;
	
	
	@Override
	public void login() {
		// TODO Auto-generated method stub
		System.err.println("service....login....");
		userDao.login();
	}

	
}

 

 

你可能感兴趣的:(java,后端)