Bean对象的获取

前言:如果没有指定加入IOC容器的Bean对象的名称 该类在IOC容器中的名称为类名首字符小写其他类型不变 

1.Bean对象的获取 

/*
	* Bean对象的获取步骤
	* 1.首先清楚Bean的命名
	* 		如果类交给IOC容器时没有指定在IOC容器中的名称
	* 			则该类在Bean中的命名为类名首字母小写 其他的字符不变
	* 2.Bean对象获取的三种方式
	* (既然要从IOC容器中取得Bean对象肯定首先需要首先获得IOC容器 IOC容器可以通过注入获得
	* 		ApplicationContext代表IOC容器)
	* 		Application中getbean的三个方法的签名
	*
	* 1. Object getBean(String name) throws BeansException;(根据name获取Bean)
	* 		因为是通过名称获得Bean对象 那么返回值就只能是Object类型 所以最后需要强制转化
	* 	2.<T> T getBean(String name, Class<T> requiredType) throws BeansException;(根据名称和类型获得Bean对象)
	* 		因为是通过名称和类型获得Bean对象 所以返回值是泛型类型
	* 3.  <T> T getBean(Class<T> requiredType) throws BeansException;(根据类名获得Bean对象)
	* 		因为是通过类型获得Bean对象 所以返回值是泛型类型
	*
	* */
@Test
	public void testGetBean(){
		//1.根据名称获取Bean对象
		DeptServiceImpl bean1 = (DeptServiceImpl)applicationContext.getBean("deptServiceImpl");
		System.out.println(bean1);
		//2.根据类型获取Bean对象
		DeptServiceImpl bean2 = applicationContext.getBean(DeptServiceImpl.class);
		System.out.println(bean2);
		//3.根据名称和类型获取Bean对象
		DeptServiceImpl bean3 = applicationContext.getBean("deptServiceImpl", DeptServiceImpl.class);
		System.out.println(bean3);
	}

2.Bean对象的作用域

	/*
	*Bean的作用域用@Scope注解来设置
	* 比如ServiceImpl类的@Service注解中已经设置过作用域为singleton
	* 也可以用@Scope("prototype")来设置设置为每次使用都会初始化
	* 有五种作用域
	* singleton :单例(容器中同名称的Bean只有一个) 默认值
	* prototype:多例(每次使用该Bean对象都会创建新的实例)
	* request:在web项目中每次请求都会创建一个新的实例 只有在web开发中有用
	* session:在web项目中 每个会话都会创建一个新的实例 只有在web开发中有用
	* application:在web项目中,创建一个全局的实例,只有当web应用重启的时候,才会销毁
	* scope的默认值为singleton 在容器启动时就会被创建 可以通过@lazy注释来延缓初始化(第一次使用时才会被创建)
	* prototype设置的Bean每次使用该Bean对象时会创建一个新的Bean对象
	* 实际开发中Bean一般都是单例的因此不需要重新赋值给scope
	* */

 3.成为Bean对象

/*
	* 成为Bean对象的方法
	* 使用@Component注解 Component意思是将当前类交给spring管理 处理成为Bean对象 是最普通的成为Bean对象的方法
	* @Controller 意思是将当前类交给spring管理 处理成为Bean对象 特别用来处理web层 是Controller层
	* @Service 意思是将当前类交给spring管理 处理成为Bean对象 特别用来处理service层
	* @Repository 意思是将当前类交给spring管理 处理成为Bean对象 特别用来处理dao层
	* */

 4.@Mapper注解的解释

	* @Mapper是mybatis的注解和Spring没有关系
	* 在Spring程序中Mybatis需要找到对应的mapper 在编译时生成动态代理对象实现数据库的查询操作等功能

 5.第三方Bean

	/*
	*第三方类如果本身不是Bean对象 如果想成为Bean对象也可以
	* 第三方bean对象的声明
	* 可以使用@Bean注解一个方法来声明第三方bean对象
	* @Bean注解的返回值应该是Bean对象
	* 比如
	* @Bean
	*public SAXReader getSAXReader(){
	*	return new SAXReader();
	*}
	*
	* 一般这个方法都在配置类中配置 配置类就是使用@Configuration注解的类
	* 如果想往第三方Bean中注入别的Bean对象直接在方法的形参中添加即可
	* 例如public SAXReader getSAXReader(DeptServiceImpl deptServiceImpl)
	* 被Bean注解的方法在Bean中的名称默认为方法名称 比如上面的Bean 名称为getSAXReader
	* 也可以在方法上添加@Bean(name="xxx") 来指定Bean的名称
	* */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值