物流公司官方网站建设方案,动易视频网站管理系统,多平台网站设计实例,怎样建设责任文化作者简介#xff1a;☕️大家好#xff0c;我是Aomsir#xff0c;一个爱折腾的开发者#xff01; 个人主页#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言Conf… 作者简介☕️大家好我是Aomsir一个爱折腾的开发者 个人主页Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言Configuration开发步骤Bean开发步骤自定义类型细节分析 ComponentScan纯注解事务开发AOP纯注解开发总结 参考文献 孙哥suns说Spring5学不会Spring? 因为你没找对人~孙帅Spring官方文档 前言
在上一篇文章中我们详细介绍了Spring2.x提供的一系列基础注解并探讨了如何使用这些注解来简化开发。这些注解在Spring框架中的作用不可忽视它们为开发者提供了更便捷的方式来管理组件、依赖注入以及其他关键方面的配置。本文将继续探讨Spring注解开发更深入地了解这些强大的工具如何加速开发过程并提高代码质量。
Configuration
在Spring3.x中引入了一项重要的新注解即 Configuration它通常被称为配置类。这个注解的作用非常强大它允许我们将Java类标记为配置Bean以代替繁琐的XML配置文件。实际上Configuration是Component注解的一种特殊形式。
开发步骤
创建配置类首先创建一个Java类并在其上标记 Configuration 注解将其变为一个配置Bean。编写配置代码在配置类中编写Spring配置代码包括Bean定义、依赖注入等。进行测试编写测试代码来验证配置类中的配置是否按预期工作。
通过使用 Configuration 注解我们可以更加方便地管理应用程序的配置减少对XML配置文件的依赖同时提高了代码的可维护性和可读性
Configuration
public class AppConfig {
}public class TestAnnotation2 {/*** 测试 Configuration 注解*/Testpublic void test1() {ApplicationContext ctx new AnnotationConfigApplicationContext(AppConfig.class);}
}Bean
Bean注解通常用于配置类中用于声明和创建Bean。它与Component注解相似都能够将类标记为由Spring管理的组件。然而Bean注解在某些方面与Component有一些关键的不同之处。
区分简单对象和复杂对象在Spring开发中我们通常将对象分为两类简单对象和复杂对象。 简单对象这些对象可以直接使用new操作符进行创建例如User、UserService、UserDAO等。复杂对象这些对象不适合直接使用new操作符创建通常是因为它们依赖其他Bean或需要进行复杂的初始化过程比如SqlSession、SqlSessionFactory等。
Bean注解主要用于声明和创建复杂对象因为它允许我们在配置类中定义复杂对象的初始化和依赖关系。
请注意即使只有类文件可用并且需要使用注解驱动的开发也可以使用Bean注解来定义Bean
开发步骤
创建配置Bean按照上图要求书写方法编写测试方法进行验证
Configuration
public class AppConfig {/*** 创建 简单对象* return User*/Beanpublic User user() {return new User();}Beanpublic Connection connection() {Connection conn null;try {Class.forName(com.mysql.cj.jdbc.Driver);conn DriverManager.getConnection(jdbc:mysql://localhost:3307/blog?useSSLfalseserverTimezoneUTC,root,123456);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return conn;}
}public class TestAnnotation2 {/*** 测试 Bean 注解 简单对象*/Testpublic void test2() {ApplicationContext ctx new AnnotationConfigApplicationContext(AppConfig.class);User user ctx.getBean(user,User.class);System.out.println(user);}/*** 测试 Bean 注解 复杂对象*/Testpublic void test3() {ApplicationContext ctx new AnnotationConfigApplicationContext(AppConfig.class);Connection connection ctx.getBean(Connection.class);System.out.println(connection connection);}
}自定义类型
对于自定义数据类型难免会遇到这种情况就是自定义类型的依赖注入对于我们依赖方和被依赖方都使用Bean的情况下我们需要进行依赖注入应该怎么办Spring会帮我们进行自动注入
依赖方在方法体内用Set直接注入被依赖方即可Spring会帮我们进行处理依赖方方法形参写上被依赖方然后直接用Set方法注入Spring也会帮我们进行处理原理一致 如下两段代码演示即可
Configuration
public class AppConfig {Beanpublic UserDAO userDAO() {return new UserDAOImpl();}Beanpublic UserService userService() {UserService userService new UserServiceImpl();// 这里可以直接注入Spring会帮我们在容器中找userService.setUserDao(userDAO);return userService;}
}Configuration
public class AppConfig {Beanpublic UserDAO userDAO() {return new UserDAOImpl();}Beanpublic UserService userService(UserDAO userDAO) {UserService userService new UserServiceImpl();// 也可以写在方法参数中Spring也会帮我们进行注入userService.setUserDao(userDAO);return userService;}
}细节分析
自定义id值可以直接修方法名也可以使用注解参数Bean(u)控制对象的创建次数可以在方法上标注Scope并设置对应的值
ComponentScan
ComponentScan 注解用于扫描并注册 Spring Bean。它等同于 XML 配置中的 context:component-scan base-package / 元素。通过在配置类上使用 ComponentScan 注解可以告诉 Spring 哪些包需要被扫描从而将这些包中的 Bean 注入容器中。
此注解具有多个属性可用于指定包含和排除的规则等。下面是一个示例用法其中包含和排除是多种多样的具体的使用方法可以参考官方文档
Configuration
ComponentScan(basePackages com.aomsir.basic,excludeFilters {ComponentScan.Filter(type FilterType.ANNOTATION, value Service.class)},includeFilters {ComponentScan.Filter(type FilterType.ANNOTATION, value Configuration.class)},useDefaultFilters false)
public class AppConfig {
}纯注解事务开发
在先前的 Spring 事务开发中我们通常需要在 XML 配置文件中设置数据源、dataSourceTransactionManager 等事务相关的配置。
然而现在我们可以使用纯注解方式来管理事务只需要创建一个配置类进行配置。接下来只需在需要事务支持的方法或业务类上添加 Transactional 注解即可无需再涉及繁琐的配置。
这种方式极大地简化了事务管理提高了代码的可维护性
Configuration
EnableTransactionManagement // 开启事务
public class TransactionAutoConfiguration {Autowiredprivate DataSource dataSource;Beanpublic DataSourceTransactionManager dataSourceTransactionManager() {DataTransactionManager dataSourceTransactionManager new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dataSource);return dataSourceTransactionManager;}
}AOP纯注解开发
在先前的AOP动态代理开发中我们已经通过注解方式大大简化了很多内容如切面类、切入点等。然而仍然需要在配置文件中声明 aop:aspectj-autoproxy / 标签以允许Spring启用AspectJ以便使用注解来编写切面。但是现在我们可以通过纯注解方式来进一步简化这些操作包括启用AOP。
这种方式极大地减少了XML配置的需求使AOP编程更加直观和便于维护
Configuration
ComponentScan(basePackages com.aomsir.basic.aop)
EnableAspectJAutoProxy // 允许Aspect - AOP,SpringBoot已经做了这一步
public class AppConfig {}Aspect
Component
public class MyAspect {private static final Logger log LoggerFactory.getLogger(MyAspect.class);Pointcut(execution(* com.aomsir.basic.aop..*.*(..)))public void pointCut(){}// 等价于invoke方法Around(pointCut())public Object arround(ProceedingJoinPoint joinPoint) throws Throwable {log.info(----log----);Object ret joinPoint.proceed();return ret;}
}Service
public class UserServiceImpl implements UserService {private static final Logger log LoggerFactory.getLogger(UserServiceImpl.class);Overridepublic void register(User user) {log.error(UserServiceImpl.register 业务运算Dao的调用);}Overridepublic boolean login(String name, String password) {log.error(UserServiceImpl.login 业务运算Dao的调用);return true;}
}总结
这样Spring中的注解编程完全分析完了。逐步将先前在Spring中使用配置文件的内容转换为注解方式是一种提高开发效率和可维护性的重要方法。Spring的注解编程使代码更加简洁和可读同时减少了XML配置的需求。这将为以后学习和应用Spring Boot等框架提供坚实的基础