专业的JAVA编程教程与资源

网站首页 > java教程 正文

spring4.x注解&java配置之基础配置(一)

temp10 2024-10-13 09:27:02 java教程 10 ℃ 0 评论

声明bean的注解

  1. @Component: 组件,没有明确的角色

  2. @Service: 在业务逻辑层(service)层使用

    spring4.x注解&java配置之基础配置(一)

  3. @Repository: 在数据访问层(dao)层使用

  4. @Controller: 在展现层(MVC=>Spring MVC) 使用

注入BEAN的注解,一般情况下通用

  1. @Autowired: Spring提供的注解

  2. @Inject: JSR-330提供的注解

  3. @Resource: JSR-250提供的注解

配置类

@Configuration: 声明当前类是一个配置类,相当于Spring配置的xml文件

@ComponentScan:自动扫描包名下所有使用@Service、@Component、@Repository和@Controller的类,并注册为Bean

@Bean 注解在方法上,声明当前方法返回值是一个Bean

代码示例:

定义配置类,并指定包扫描目录

1.通过AnnotationConfigApplicationContext加载配置

AnnotationConfigApplicationContext context =

new AnnotationConfigApplicationContext(DiConfig.class);

2.context.getBean("beanName")获取spring容器中的bean

Java配置实现

java配置是Spring4.x推荐的配置方式,可以完全替代xml配置;Java配置也是Spring Boot推荐的配置方式。

java配置是通过@Configuration 和 @Bean来实现的

示例:

代码解释:

其实@Configuration、@Bean配和使用,此处就不需要有@ComponentScan包扫描配置了,因为所有的bean都在此类中定义了。

@Bean注解适用在方法上,方法返回值和方法名称一致,无属性Bean可以通过上图标识1代码进行配置,同时带有bean依赖的bean实例化,可以通过上图标识的2,3方式进行配置。

比如注入FunctionService可以通过调用functionService()方法获取FunctionService实例并set,另一种注入的方式,直接将FunctionService作为参数给userFunctionService(),这也是Spring容器提供的极好的功能,在Spring容器中,只要容器存在某个Bean,都可以在另一个Bean的声明方法的参数中配置注入。

AOP:面向切面编程,相对于OOP面向对象编程

Spring的AOP的存在目的是为了接耦。AOP可以让一组类共享相同的行为,在OOP中只能通过继承类和接口实现,来使代码的藕合度增强,且类继承为单继承,阻碍更多行为添加到一组类上,AOP弥补了OOP的不足。

Spring支持AspectJ注解式切面编程

使用@AspectJ声明是一个切面

使用@After(后置通知)、@Before(前置通知)、@Around(环绕通知)定义建言(advice),可直接拦截规则(切点)作为参数。

其中@After、@Before、@Around参数的拦截规则为切点(PointCut),为了使切点复用,可以使用@PointCut专门定义拦截规则,然后在@After、@Before、@Around的参数中调用

其中符合条件的每一个被拦截处为连接点(JoinPoint)

代码式例:

代码解释:

@Order:定义切面优先级,value越小优先级越高,反之优先级则越小

@PointCut定义切入点

@annotation(loggerRecord): LoggerRecord是一个自定义注解@Around(“@annotation(loggerRecord)”)

标识拦截使用了该注解的方法

@Component:让切面称为Spring容器的Bean

开启AOP:

使用@EnableAspectJAutoProxy开启AOP

AOP相关注解还通过了以下几种

@AfterReturning :返回后通知

@AfterThrowing:异常通知

@AdviceName:建言名称

spring基本配置讲完,后续会针对spring的常用配置做介绍~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表