前言:如果没有指定加入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的名称 * */