环境搭建

配置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 注解开发的更多相关文章

  1. Spring _day02_IoC注解开发入门

    1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...

  2. spring原始注解开发-01

    我们使用xml-Bean标签的配置方式和注解做对比理解 1.创建UserDao接口以及UserDao的实现类UserDaoImpl(接口代码省略) public class UserDaoImpl i ...

  3. Spring使用注解开发及使用java类进行配置bean

    Spring使用注解开发 说明 在spring4之后,想要使用注解形式,必须得要引入aop的包 在配置文件当中,还得要引入一个context约束 <?xml version="1.0& ...

  4. Spring基于注解开发异常

    基于注解开发: 一开始:用的jar包: 百度查到: 导入aop包: 没用 有的说: Spring版本和jdk版本不匹配 于是我换成了4.0版本 导入的jar包: 还是报错. 解决办法:添加spring ...

  5. spring——使用注解开发

    注意:spring4之后,使用注解开发需要导入AOP包org.springframework:spring-aop:5.2.5.RELEASE以及context约束,增加注解的支持 <?xml ...

  6. Spring MVC注解开发入门

    注解式开发初步 常用的两个注解: @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求.标识当前 ...

  7. Spring原始注解开发-02

    使用@Repository.@Service.@Controller注解配置,使其更加清晰属于哪一层,因为我是模拟的web层,所有没有使用@Controller注解,后面结合web开发会使用到 1.创 ...

  8. spring @Validated 注解开发中使用group分组校验

    之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...

  9. Spring基于注解开发的注解使用之AOP(部分源代码分析)

    AOP底层实现动态代理 1.导入spring-aop包依赖 <!--aopV1--> <dependency> <groupId>org.springframewo ...

  10. Spring MVC 注解开发详解

    @Controller控制器定义 1.Controller是单利模式,被多个线程请求共享,因此设计成无序状态. 2.通过@controller标注即可将class定义为一个controller类.为使 ...

随机推荐

  1. k8s集群创建阿里云版本

    阿里云创建k8s集群实例 创建两个8G内存的抢占实例(青岛),能ssh 默认关闭防火墙,且没有交换分区 配置/etc/hosts,主机名 配置k8s仓库 配置命令补全 安装docker(需要conta ...

  2. 2023CSP-S游记

    2023 CSP-S 游记 赛前 上午去花卉市场看了半天花,算是放松放松,主要是为了晚上给干妈过50岁生日. 还以为是 2 点开始,1 点 40 多就到了,然后去买了杯奶茶,然后进场. 结果我是第一考 ...

  3. 算法学习笔记(10): BSGS算法及其扩展算法

    BSGS算法及其扩展算法 BSGS算法 所谓 Baby Step, Giant Step 算法,也就是暴力算法的优化 用于求出已知 \(a, b, p\), 且 \(p\) 为质数 时 \(a^x \ ...

  4. kettle从入门到精通 第十七课 kettle Transformation executor

    Transformation executor步骤是一个流程控件,和映射控件类似却又不一样. 1.子转换需要配合使用从结果获取记录和复制记录到结果两个步骤,而子映射需要配合映射输入规范和映射输出规范使 ...

  5. Kafka多维度调优

    优化金字塔 应用程序层面 框架层面(Broker层面) JVM层面 操作系统层面 应用程序层面:应当优化业务代码合理使用kafka,合理规划主题,合理规划分区,合理设计数据结构: 框架层面:在不改动源 ...

  6. 使用 Promise.withResolvers() 来简化你将函数 Promise 化的实现~~

    引言 在JavaScript编程中,Promise 是一种处理异步操作的常用机制.Promise 对象代表了一个尚未完成但预期将来会完成的操作的结果.在本文中,我们将探讨如何通过使用 ES2024 的 ...

  7. 5分钟理透LangChain的Chain

    LangChain几乎是LLM应用开发的第一选择,它的野心也比较大,它致力于将自己打造成LLM应用开发的最大社区.而LangChain最核心的部分非 Chain 莫属. 那Chain到底是个啥,概念比 ...

  8. .Net Core5.0中Autofac依赖注入整合多层,项目中可直接用

    一.配置Autofac替换内置DI 1.安装Nuget包:Autofac,Autofac.Extensions.DependencyInjection 2.Program.cs中CreateHostB ...

  9. 【读论文】LLaMA: Open and Efficient Foundation Language Models

    论文:LLaMA: Open and Efficient Foundation Language Models 模型代码:https://github.com/facebookresearch/lla ...

  10. 张高兴的 MicroPython 入门指南:(二)GPIO 的使用

    目录 什么是 GPIO 使用方法 使用微动开关点亮板载 LED 硬件需求 电路 代码 参考 什么是 GPIO GPIO 是 General Purpose Input Output 的缩写,即&quo ...