【Spring】05 注解开发
环境搭建
配置ApplicationContext.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"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c" 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 http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
"
>
<context:annotation-config /> </beans>
配置注解组件扫描位置
<context:component-scan base-package="cn.dai" />
配置之后,会有叶子+放大镜的图标,用于扫描、搜索组件
@Component注解
注册Bean不再需要写XML标签
在类上打上@Component注解,直接在Spring容器中注册为Bean
package cn.dai.pojo; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component; /**
* @author ArkD42
* @file Spring
* @create 2020 - 05 - 05 - 8:39
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component // @Component 将类注册到Spring容器
// 等价于 <bean id="user" class="cn.dai.pojo.User" />
public class User {
private String name;
}
测试
public class AnnotationTest { @Test
public void anoTest(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
User user = applicationContext.getBean("user", User.class);
System.out.println(user);
String name = user.getName();
System.out.println(name);
}
}
在属性上打上注解,即:使用字段赋值
@Value("阿伟") // 等同: <property name="name" value="阿伟">
private String name;
测试
这个@Value注解同样对SETTER方法使用,
这里使用了Lombok就没有代码上的SETTER方法能注解了
@Value("阿杰")
public void setName(String name){
this.name = name;
}
@Component的衍生注解
在Web开发中我们会按照MVC的三层架构分层开发
Spring分别对这些层的注册使用不同名称的注解,
其本质的功能都是一样的,注册到Spring容器
1、Dao层【@Repository】
2、Service层【@Service】
3、Controller层【@Controller】
这四个注解的功能是一样的
@Scope Bean作用域注解
一般值就设置:
Singleton
Prototype
单例或者原型这两种情况
总结:
XML适用任何配置,编写繁琐
注解需要XML的约束支持
最佳实践?
1、XML管理Bean
2、属性交给注解完成
注意注解的约束开启,这样才有效
全注解配置
JavaConfig配置
现在这个工程是没有写过任何XML容器文件的
可以看到在包目录中编写另一个config目录
我编写了一个ApplicationContext,这个类就充当了我们的Spring容器
@Configuration注解
被注解的类注册成为Bean容器
package cn.dai.config; import org.springframework.context.annotation.Configuration; /**
* @author ArkD42
* @file Spring
* @create 2020 - 05 - 05 - 9:12
*/
@Configuration
public class ApplicationContext { }
编写一个实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String name;
private int age;
}
@Bean 注解
将这个类在容器类中注册
这个注解充当了@Component作用
@Bean
public Person person(){
return new Person();
}
实际测试获取对象
使用的是new AnnotationConfigApplicationContext(cn.dai.config.ApplicationContext.class)
将我们的容器类的类对象注入,获取容器实例
下面获取的参数是容器类中方法的名字和所对应的Bean类的类对象
public class AnnotationTest {
@Test
public void a(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(cn.dai.config.ApplicationContext.class);
Person person = applicationContext.getBean("person", Person.class);
System.out.println(person);
}
}
@ComponentScan 注解
或者显示的声明扫描目录
然后实体类使用@Component
被扫描进容器类注册
测试结果还是一样可以
要注意的是
使用@Component 被扫描后获取的实例是从Spring中获取的,并非容器类
使用@Bean 获取的实例,则就是这个注解的方法获取的实例
并不是同一个对象
@Import 合并导入注解
跟XML的导入标签一样,我们可以声明多个容器类,
然后在其中一个核心总容器类使用@Import把其他容器类导入进来
【Spring】05 注解开发的更多相关文章
- Spring _day02_IoC注解开发入门
1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...
- spring原始注解开发-01
我们使用xml-Bean标签的配置方式和注解做对比理解 1.创建UserDao接口以及UserDao的实现类UserDaoImpl(接口代码省略) public class UserDaoImpl i ...
- Spring使用注解开发及使用java类进行配置bean
Spring使用注解开发 说明 在spring4之后,想要使用注解形式,必须得要引入aop的包 在配置文件当中,还得要引入一个context约束 <?xml version="1.0& ...
- Spring基于注解开发异常
基于注解开发: 一开始:用的jar包: 百度查到: 导入aop包: 没用 有的说: Spring版本和jdk版本不匹配 于是我换成了4.0版本 导入的jar包: 还是报错. 解决办法:添加spring ...
- spring——使用注解开发
注意:spring4之后,使用注解开发需要导入AOP包org.springframework:spring-aop:5.2.5.RELEASE以及context约束,增加注解的支持 <?xml ...
- Spring MVC注解开发入门
注解式开发初步 常用的两个注解: @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求.标识当前 ...
- Spring原始注解开发-02
使用@Repository.@Service.@Controller注解配置,使其更加清晰属于哪一层,因为我是模拟的web层,所有没有使用@Controller注解,后面结合web开发会使用到 1.创 ...
- spring @Validated 注解开发中使用group分组校验
之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...
- Spring基于注解开发的注解使用之AOP(部分源代码分析)
AOP底层实现动态代理 1.导入spring-aop包依赖 <!--aopV1--> <dependency> <groupId>org.springframewo ...
- Spring MVC 注解开发详解
@Controller控制器定义 1.Controller是单利模式,被多个线程请求共享,因此设计成无序状态. 2.通过@controller标注即可将class定义为一个controller类.为使 ...
随机推荐
- 美团一面:什么是CAS?有什么优缺点?我说我只用过AtomicInteger。。。。
引言 传统的并发控制手段,如使用synchronized关键字或者ReentrantLock等互斥锁机制,虽然能够有效防止资源的竞争冲突,但也可能带来额外的性能开销,如上下文切换.锁竞争导致的线程阻塞 ...
- C#.NET AES CBC 加密
重点: 1. KEY 和 IV 转 byte[] 时的编码. 2.要加密的字符串转 byte[] 时的编码. 3.AES 的PADDING,MODE. 4.加密后的byte[] 转字符串时的编码. 先 ...
- AlexNet论文解读
前言 作为深度学习的开山之作AlexNet,确实给后来的研究者们很大的启发,使用神经网络来做具体的任务,如分类任务.回归(预测)任务等,尽管AlexNet在今天看来已经有很多神经网络超越了它,但是 ...
- The bean ‘xxx‘ could not be injected as a ‘xxx‘because it is a JDK dynamic proxy that implements错误解决
1.解决方法:使用@Autowired 2.@autowired和@resource注解的区别区别:1.@Autowired注解由Spring提供,只按照byType注入:@resource注解由J2 ...
- springboot和springmvc区别:
spring boot只是一个配置工具,整合工具,辅助工具.springmvc是框架,项目中实际运行的代码Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但 ...
- kali更换apt镜像
kali更换apt镜像 vim /etc/apt/sources.list 进来之后按i进入编辑模式,把其他的镜像#注释掉之后,加上新的镜像,然后esc退出编辑,按:输入wq保存并退出! 上面的办法不 ...
- Unity 利用Cache实现边下边玩
现在手机游戏的常规更新方案都是在启动时下载所有资源更新,游戏质量高的.用户粘性大的有底气,先安装2个G,启动再更新2个G,文件小了玩家还觉得品质不行不想玩. 最近在做微信.抖音小游戏,使用他们提供的资 ...
- MAC下Cowardly refusing to 'sudo brew install解决方案
副标题:<论学习英语的重要性> 在执行'sudo brew install cmake'的时候报错,错误信息如下. (一脸懵逼) 解决方案: 其实报错信息都说好了,大概意思是不能用管理员权 ...
- ZYNQ Linux使用SPI驱动
--- title: ZYNQ Linux使用SPI驱动 EntryName: xilinx-zynq-using-spi-driver-in-linux date: 2020-10-14 10:02 ...
- day01小程序快速入门
这几天正式开始微信小程序的修炼了,就目前而言来看简直就是vue和react的结合体,所以在学小程序前,先把框架熟悉还是挺有用的. 一.简介 1.1与普通网页区别 二.第一个小程序 需要注册小程序开发账 ...