中国网站排名前100,丈哥seo博客工具,无限元宝网页传奇,网站建设外包合同在Spring中基于Java类进行配置的完整步骤发布于 2020-7-7|复制链接基于Java配置选项#xff0c;可以编写大多数的Spring不用配置XML#xff0c;下面前言JavaConfig 原来是 Spring 的一个子项目#xff0c;它通过 Java 类的方式提供 Bean 的定义信息#xff0c;在 Spring4 的…在Spring中基于Java类进行配置的完整步骤发布于 2020-7-7|复制链接基于Java配置选项可以编写大多数的Spring不用配置XML下面前言JavaConfig 原来是 Spring 的一个子项目它通过 Java 类的方式提供 Bean 的定义信息在 Spring4 的版本 JavaConfig 已正式成为 Spring4 的核心功能 。本文将详细介绍关于Spring中基于Java类进行配置的相关内容下面话不多说了来一起看看详细的介绍吧1 定义 Bean普通的 POJO 只要标注了 Configuration 注解就可以为 Spring 容器提供 Bean 的定义信息。javaConfigurationpublic class SystemConfig {/*** 定义 Bean并实例化** return*/Beanpublic UserDao userDao() {return new UserDao();}Beanpublic DeptDao deptDao() {return new DeptDao();}/*** 定义 UserService并把之前定义的 UserDao 与 DeptDao 注入进来** return*/Beanpublic UserService userService() {UserService service new UserService();service.setUserDao(userDao());service.setDeptDao(deptDao());return service;}}这个类的方法标注了 Bean 注解即为定义 Bean Bean 的类型由方法返回值的类型决定名称默认和方法名同名也可以通过入参显示指定 Bean 名称比如 Bean(name”xxx”)。 Bean 所标注的方法体提供了 实例化 Bean 的逻辑 。以上配置和下面的 xml 是等效的java基于 Java 类的配置方式和基于 XML 或者基于注解的配置方式相比——Java 类的配置方式通过代码编程的方式可以更加灵活地实例化 Bean 和装配 Bean 之间的关系。XML 或者基于注解的方式都是通过声明来定义配置的所以灵活性上要逊一些但在配置上更简单 。因为 Configuration 注解类本身已经标注了 Component所以这些类可以像那些普通的 Bean 一样被注入到其他的 Bean 中。javaConfigurationpublic class ApplicationConfig {Autowiredprivate SystemConfig systemConfig;Beanpublic AuthorityService authorityService() {AuthorityService service new AuthorityService();service.setUserDao(systemConfig.userDao());service.setDeptDao(systemConfig.deptDao());return service;}}Spring 会对配置类中所有标注了 Bean 的方法使用 AOP 增强引入 Bean 的生命周期管理逻辑。比如上面的 systemConfig.userDao()它返回的是对应 Bean 的单例。在 Bean 中我们还可以通过标注 Scope 注解来控制 Bean 的作用范围javaScope(prototype)Beanpublic DeptDao deptDao() {return new DeptDao();}这样每次调用 deptDao() 方法都会返回一个新的实例javaassertNotSame(authorityService.getDeptDao().hashCode(),authorityService.getDeptDao().hashCode());注意 使用基于 Java 类进行配置类路径下必须有 Spring AOP 与 CGLib 库。2 启动 Spring 容器2.1 只使用 Configuration 类可以使用 AnnotationConfigApplicationContext 类的构造函数传入标注了 Configuration 的 Java 类来启动 Spring 容器 。javaApplicationContext contextnew AnnotationConfigApplicationContext(SystemConfig.class);UserService userService (UserService) context.getBean(userService);assertNotNull(userService);如果存在多个 Configuration 配置类那么可以 AnnotationConfigApplicationContext 中注册它们然后再通过刷新容器应用这些配置类javaAnnotationConfigApplicationContext contextnew AnnotationConfigApplicationContext();//注册多个配置类context.register(SystemConfig.class);context.register(ApplicationConfig.class);//刷新容器(应用这些配置类)context.refresh();ApplicationConfig configcontext.getBean(ApplicationConfig.class);assertNotNull(config);也可以通过 Import 将多个配置类组装到一个配置类中然后仅需注册这个组装好的配置类 即可启动容器javaConfigurationImport(SystemConfig.class)public class ApplicationConfig2 {Autowiredprivate SystemConfig systemConfig;Beanpublic AuthorityService authorityService() {AuthorityService service new AuthorityService();service.setUserDao(systemConfig.userDao());service.setDeptDao(systemConfig.deptDao());return service;}}单元测试javaAnnotationConfigApplicationContext contextnew AnnotationConfigApplicationContext(ApplicationConfig2.class);ApplicationConfig2 configcontext.getBean(ApplicationConfig2.class);assertNotNull(config);final AuthorityService authorityService config.authorityService();assertNotNull(authorityService.getDeptDao());assertNotSame(authorityService.getDeptDao().hashCode(),authorityService.getDeptDao().hashCode());2.2 使用 XML 文件引用 Configuration 类的配置标注了 Configuration 的配置类也是一个 Bean所以它也可以被 Spring 的 扫描到 。 因此如果希望将配置类组装到 XML 的配置文件中并通过 XML 的配置文件启动 Spring那么仅需要在 XML 中通过 扫描到相应的配置类即可 。java2.3 在 Configuration 类中引用 XML 文件的配置在 Configuration 配置类中可以直接通过 ImportResource 引入 XML 的配置文件这样就可以直接通过 Autowired 引用 xml 配置文件中定义的 Bean。配置文件xmlConfiguration 类javaImportResource(classpath:beans5-11.xml)Configurationpublic class ServiceConfig {BeanAutowiredpublic RelationService relationService(GroupDao groupDao,RoleDao roleDao){RelationService servicenew RelationService();service.setGroupDao(groupDao);service.setRoleDao(roleDao);return service;}}单元测试javaAnnotationConfigApplicationContext contextnew AnnotationConfigApplicationContext(ServiceConfig.class);ServiceConfig configcontext.getBean(ServiceConfig.class);assertNotNull(config);RelationService serviceconfig.relationService((GroupDao) context.getBean(groupDao),(RoleDao) context.getBean(roleDao));assertNotNull(service.getRoleDao());