7、Spring之基于注解管理bean

打印 上一主题 下一主题

主题 851|帖子 851|积分 2553

本质上:所有一切的操作都是Java代码来完成的,XML和注解只是告诉框架中的Java代码如何执行。
7.1、环境搭建

创建名为spring_ioc_annotation的新module,过程参考3.1节
7.1.1、创建spring配置文件

  1. [/code][size=4]7.1.2、创建UserDao接口及实现类[/size]
  2. [img]https://img2023.cnblogs.com/blog/2052479/202308/2052479-20230805183319834-573516107.png[/img]
  3. [code]package org.rain.spring.dao;
  4. /**
  5. * @author liaojy
  6. * @date 2023/8/5 - 18:32
  7. */
  8. public interface UserDao {
  9. }
复制代码
  1. package org.rain.spring.dao.impl;
  2. import org.rain.spring.dao.UserDao;
  3. /**
  4. * @author liaojy
  5. * @date 2023/8/5 - 18:33
  6. */
  7. public class UserDaoImpl implements UserDao {
  8. }
复制代码
7.1.3、创建UserService接口及实现类

  1. package org.rain.spring.service;
  2. /**
  3. * @author liaojy
  4. * @date 2023/8/5 - 18:35
  5. */
  6. public interface UserService {
  7. }
复制代码
  1. package org.rain.spring.service.impl;
  2. import org.rain.spring.service.UserService;
  3. /**
  4. * @author liaojy
  5. * @date 2023/8/5 - 18:36
  6. */
  7. public class UserServiceImpl implements UserService {
  8. }
复制代码
7.1.4、创建UserController

  1. package org.rain.spring.controller;
  2. /**
  3. * @author liaojy
  4. * @date 2023/8/5 - 18:38
  5. */
  6. public class UserController {
  7. }
复制代码
7.2、注解和扫描

7.2.1、标识组件的常用注解

注解含义@Component将类标识为普通组件@Controller将类标识为控制层组件@Service将类标识为业务层组件@Repository将类标识为持久层组件
@Controller、@Service、@Repository这三个注解只是在@Component注解的基础上起了三个新的名字
从Spring使用IOC容器管理bean组件的角度来看,这四个组件注解没有区别
@Controller、@Service、@Repository这三个注解只是为了让开发人员便于分辨组件的作用
7.2.2、使用组件注解

7.2.2.1、@Controller注解

  1. package org.rain.spring.controller;
  2. import org.springframework.stereotype.Controller;
  3. /**
  4. * @author liaojy
  5. * @date 2023/8/5 - 18:38
  6. */
  7. @Controller
  8. public class UserController {
  9. }
复制代码
7.2.2.2、@Service注解


注意:组件注解只能用于实现类,不能用于接口;因为bean的class属性只能是实现类,不能是接口
  1. package org.rain.spring.service.impl;
  2. import org.rain.spring.service.UserService;
  3. import org.springframework.stereotype.Service;
  4. /**
  5. * @author liaojy
  6. * @date 2023/8/5 - 18:36
  7. */
  8. @Service
  9. public class UserServiceImpl implements UserService {
  10. }
复制代码
7.2.2.3、@Repository注解


注意:组件注解只能用于实现类,不能用于接口;因为bean的class属性只能是实现类,不能是接口
  1. package org.rain.spring.dao.impl;
  2. import org.rain.spring.dao.UserDao;
  3. import org.springframework.stereotype.Repository;
  4. /**
  5. * @author liaojy
  6. * @date 2023/8/5 - 18:33
  7. */
  8. @Repository
  9. public class UserDaoImpl implements UserDao {
  10. }
复制代码
7.2.3、扫描组件注解


注意:为了减少扫描的耗时,推荐尽可能精确地指定package
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  6.    
  7.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  8.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  9.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  10. </beans>
复制代码
7.2.4、测试

  1. package org.rain.spring.test;
  2. import org.junit.Test;
  3. import org.rain.spring.controller.UserController;
  4. import org.rain.spring.dao.UserDao;
  5. import org.rain.spring.service.UserService;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;
  8. /**
  9. * @author liaojy
  10. * @date 2023/8/5 - 19:18
  11. */
  12. public class IOCByAnnotationTest {
  13.     @Test
  14.     public void testAutowireByAnnotation(){
  15.         ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-ioc-annotation.xml");
  16.         UserController userController = ioc.getBean(UserController.class);
  17.         System.out.println(userController);
  18.         UserService userService = ioc.getBean(UserService.class);
  19.         System.out.println(userService);
  20.         UserDao userDao = ioc.getBean(UserDao.class);
  21.         System.out.println(userDao);
  22.     }
  23. }
复制代码
7.3、高级扫描

7.3.1、排除扫描指定组件

7.3.1.1、方式一:根据注解指定排除(常用)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  6.    
  7.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  8.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  9.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  10. </beans><?xml version="1.0" encoding="UTF-8"?>
  11. <beans xmlns="http://www.springframework.org/schema/beans"
  12.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  13.        xmlns:context="http://www.springframework.org/schema/context"
  14.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  15.    
  16.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  17.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  18.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  19. </beans>   
复制代码
7.3.1.2、方式二:根据类型指定排除

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  6.    
  7.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  8.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  9.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  10. </beans><?xml version="1.0" encoding="UTF-8"?>
  11. <beans xmlns="http://www.springframework.org/schema/beans"
  12.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  13.        xmlns:context="http://www.springframework.org/schema/context"
  14.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  15.    
  16.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  17.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  18.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  19. </beans>   
复制代码
7.3.2、仅扫描指定组件

7.3.2.1、方式一:根据注解指定包含(常用)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  6.    
  7.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  8.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  9.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  10. </beans><?xml version="1.0" encoding="UTF-8"?>
  11. <beans xmlns="http://www.springframework.org/schema/beans"
  12.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  13.        xmlns:context="http://www.springframework.org/schema/context"
  14.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  15.    
  16.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  17.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  18.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  19. </beans>            
复制代码
7.3.2.2、方式二:根据类型指定包含

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  6.    
  7.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  8.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  9.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  10. </beans><?xml version="1.0" encoding="UTF-8"?>
  11. <beans xmlns="http://www.springframework.org/schema/beans"
  12.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  13.        xmlns:context="http://www.springframework.org/schema/context"
  14.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  15.    
  16.     <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
  17.     <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
  18.     <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>
  19. </beans>            
复制代码
7.4、注解组件的id

7.4.1、默认情况

通过注解+扫描所配置的bean的id,默认值为类的小驼峰;即UserController类对应的bean的id就是userController
7.4.2、自定义

可通过标识组件的注解的value属性设置自定义的bean的id


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表