Spring6--注解

学习笔记

从 Java 5 开始增加了对注解的支持,Spring 从 2.5 版本开始提供了对注解技术的全面支持,简化 Spring 的 XML 配置.

一、 容器:IOC

1. Spring Bean

这些注解直接标注在Java类上,将它们定义为 Spring Bean。

  • @Component
    描述Spring中的Bean,它是一个泛化的概念,表示一个组件,可以用在任何层次。
  • @Repository
    将Dao层的类标识为Spring中的Bean。
  • @Service
    将Service层的类标识为Spring中的Bean。
  • @Controller
    将Controller层的类标识为Spring中的Bean。

2. 自动注入

  • @Autowired
    根据类型进行转配
@Autowired
private UserDao userDao;
@Autowired
private UserService userService;
  • @Qualifier(“Bean”)
    与@Autowird配合使用,根据名称进程装配
@Autowired
@Qualifier("userDaoImpl") // 指定bean的名字
private UserDao userDao;
  • Resource
    默认根据名称装配ByName,未指定name时,使用属性名作为name。通过name找不到的话会自动启动通过类型byType装配。

在使用Spring Bean注解时,给定Bean一个Name,该Name与Resource的name属性对应。

@Repository("myUserDao") //将UserDaoImpl类命名为myUserDao
public class UserDaoImpl implements UserDao {
	...
}

@Service
public class UserServiceImpl implements UserService {

    @Resource(name = "myUserDao") // 在Servic层使用Resource注解注入UserDaoImpl,如果未注明name ,则按照属性名(myUserDao)查找
    private UserDao myUserDao;
	...
    }
}

3. Spring 全注解开发

全注解开发就是不再使用Spring配置文件,写一个配置类来代替配置文件。

  • @Configuration
  • @ComponentScan
@Configuration
//@ComponentScan({"com.atguigu.spring6.controller", "com.atguigu.spring6.service","com.atguigu.spring6.dao"})
@ComponentScan("com.atguigu.spring6") //注明扫描范围
public class Spring6Config {
}

二、面向切面:AOP

1. 创建切面类并配置

  • @Aspect
    表示这个类是一个切面类
// @Aspect表示这个类是一个切面类
@Aspect
// @Component注解保证这个切面类能够放入IOC容器
@Component
public class LogAspect {
	...
}

2. 通知

  • 前置通知:使用**@Before**注解标识,在被代理的目标方法前执行
  • 返回通知:使用**@AfterReturning**注解标识,在被代理的目标方法成功结束后执行
  • 异常通知:使用**@AfterThrowing**注解标识,在被代理的目标方法异常结束后执行
  • 后置通知:使用**@After**注解标识,在被代理的目标方法最终结束后执行
  • 环绕通知:使用**@Around**注解标识,使用try…catch…finally结构围绕整个被代理的目标方法,包括上面四种通知对应的所有位置

3. 重用切入点表达式

  • 声明
@Pointcut("execution(* com.atguigu.aop.annotation.*.*(..))")
public void pointCut(){}

在同一个切面中使用@Before(“pointCut()”)
在不同切面中使用@Before(“com.atguigu.aop.CommonPointCut.pointCut()”)

  • 切面优先级
    @Order(n) :n越小优先级越高

三、 测试

1. JUnit5

//两种方式均可
//方式一
@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:beans.xml")
//方式二
@SpringJUnitConfig(locations = "classpath:beans.xml")
public class SpringJUnit5Test {
	...	
    }
}

beans.xml 文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.atguigu.spring6.bean"/>
</beans>

2. JUnit4

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:beans.xml")
public class SpringJUnit4Test {
	...	
    }
}

beans.xml文件与JUnit5相同

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值