首页 > 其他分享 >Spring02_Spring0配置

Spring02_Spring0配置

时间:2023-04-13 11:44:13浏览次数:29  
标签:Spring 配置 Spring02 private Bean import 注解 Spring0 public

一、Spring 0配置开发

​ 从 Spring3.0 版本开始,Spring 框架尽量不再使用 Spring 配置文件来配置管理任何 Bean,而是采用自动搜索 某些路径下的 Java 类,并将这些 Java 类注册成 Bean 示例。并使用注解 Annotation 的方式来标注要管理的 Bean.

​ Spring 要求程序开发人员显示的指定搜索哪些路径下的 Java 类,对于该路径下的 Java 类如果使用了 Annotation 注解标注了该类,Spring 容器则会认为这是需要管理的 Bean 类。Spring 提供了如下几个 Annotation 注解来标注 Java 类。

​ @Component:标注一个普通的 Spring Bean 类。

​ @Controller:标注一个控制器组件类。

​ @Service:标注一个业务逻辑组件类。

​ @Repository:标注一个 DAO 组件类。

​ 使用 0 配置开发需要使用到 context 命名空间,引入后需要使用该命名空间下的 component-scan 元素中的 base-package 属性执行要扫描的包。

xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"

(一)@Component 注解开发

​ 以下面的 Person 为例,分别测试加注解和不加注解的两种情况。

public class PersonTest {

    @Test
    public void testComponent () {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-beans.xml");
        Person person = applicationContext.getBean(Person.class);
        System.out.println(person);
    }

    @Before
    public void setUp() throws Exception {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.get(Calendar.HOUR)+":"+calendar.get(Calendar.MINUTE)+":"+calendar.get(Calendar.SECOND));
    }

    @After
    public void tearDown() throws Exception {
    }
}

image-20230412161811138

​ 使用 @Value 注解可以为属性赋值,如下:

image-20230412162119833

​ @Component、@Service、@Repository 注解类中都包含一个 name 属性,用于指定 Bean 在 Spring 容器 中的 id 值,@value 注解用于为 Bean 的成员变量指定基本数据类型和字符串的值,@Resource 注解用于为 Bean 的成员变量指定 Spring 容器中的其他 Bean 对象引用,@Scope 注解用于指定 Bean 的作用域。

(二)@Autowired 自动配置

​ 使用 @Autowird 注解开发即解决 DI 的问题,之前都是用 ref 指向一个 bean 或者使用 ByName / ByType 进行简化,如果使用注解@Resource,并且在@Resource 中使用了 name 属性指定了配置依赖,在 Spring 容器没有发现依赖时,会导致应用程序抛出异常,所以推荐使用注解 @Autowired 进行自动配置。

​ 如果在 Spring 中先按照 byName 的方式去匹配,如果没有匹配到,再按照 byType 的方式去匹配,如果都没有匹配到才会抛出异常。而且使用 @Autowired 注解时,对应的成员变量在 Bean 类定义中都不需要提供 get 和 set 方法就可以。

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component("user")
public class User {
    @Value("500")
    private int age;
    @Value("yaoooo")
    private String name;
    @Autowired
    private Role role;
}

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

//@Data 为了验证上面的可以省略 get set所以将 Lombok 注释,顺便重写以下 role 的 toString
@Component("role")
public class Role {
    /**
     * 角色名称
     */
    @Value("芜湖~")
    private String roleName;
    /**
     * 角色代码
     */
    @Value("嗨害害")
    private String roleCode;

    public Role(String roleName, String roleCode) {
        this.roleName = roleName;
        this.roleCode = roleCode;
    }

    public Role() {
    }
    
    @Override
    public String toString() {
        return "Role{" +
                "roleName='" + roleName + '\'' +
                ", roleCode='" + roleCode + '\'' +
                '}';
    }
}
}

image-20230413095158775

二、模拟注解开发实例

​ 使用几个简单的类模拟 service 调用 dao 进行业务逻辑处理。

//使用 BookService
com/qlu/bean/Book.java
com/qlu/dao/BookDao.java
com/qlu/dao/impl/BookDaoImpl.java
com/qlu/service/BookService.java
com/qlu/service/impl/BookServiceImpl.java
//他奶奶滴,我说怎么报错没有bean,注释上到接口上了
<!--前面都一样就不写了--> 
<context:component-scan base-package="com.qlu"></context:component-scan>
import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class Book {

    private String name;
    private String author;
    private double price;
}

​ 在 dao 里面瞎写点数据放进去,给两个类标上 Component 的注释,数据持久层就是 @Repository,业务逻辑就是 @Service,都是和 Component 一样的,不过给人看能明白是干什么的。

public interface BookDao {
    /**
     * find
     * @return
     */
    List<Book> findAll();
}

import java.util.ArrayList;
import java.util.List;
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
    @Override
    public List<Book> findAll() {
        ArrayList<Book> books = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            books.add(new Book().setName("java"+i).setAuthor("author"+i).setPrice(100+i));
        }
        return books;
    }
}

​ 使用 @Autowired 将 bookDao 注入到 Service 使用。

@Service("bookService")
public interface BookService {
    /**
     * 调用dao的
     * @return
     */
    List<Book> selectAll();
}

@Service("bookService")
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;

    @Override
    public List<Book> selectAll() {
        return bookDao.findAll();
    }
}

​ 测试结果

image-20230413110059600

标签:Spring,配置,Spring02,private,Bean,import,注解,Spring0,public
From: https://www.cnblogs.com/purearc/p/17313943.html

相关文章

  • 河北稳控科技多通道振弦传感器无线采集仪与参数配置工具连接
    河北稳控科技多通道振弦传感器无线采集仪与参数配置工具连接VS101~VS432设备配备了专门的参数配置工具SETP来完成设备工作参数的查看和修改工作。 连接前的准备工作(1)数据接口与计算机连接使用标配的通讯线与计算机RS232接口连接。若需基于手机网络发送数据,请在开机前......
  • 让 Spartacus 服务器端渲染引入 long API 调用超时机制的两种配置方法
    两种方法,使用config.backend.timeout={浏览器:...,服务器:...},或者可以更具体地配置,即基于Request粒度,通过将HTTP_TIMEOUT_CONFIGHttpContextToken传递给AngularHttpClient的方法来针对每个具体请求进行配置。在SSR(Node.js)中,超时处理耗时过长的外部http调用是一项尤为重......
  • django 配置admin 数据管理,增加数据批量上传下载功能
    在使用django-admin带来直接管理数据库带来的便利的同时,我们希望数据能批量上传,为了达到此目的,我们需要django-admin-export 模块一、安装模块pip3installdjango-import-export-ihttps://mirrors.aliyun.com/pypi/simple/二、settings.py注册模块INSTALLED_APPS=......
  • MATLAB代码:考虑电动汽车负荷随机性的蓄电池容量优化配置
    MATLAB代码:考虑电动汽车负荷随机性的蓄电池容量优化配置关键词:蓄电池容量优化配置 储能优化配置 中长期配置并网波动性参考文档:《不确定环境下并网型光储微电网的容量规划》《考虑电动汽车有序充电的光储充电站储能容量优化策略_李景丽》仅参考部分模型,非复现非复现优势......
  • linux-Ubuntu环境配置解决
    在Ubuntu上安装meld,ubuntu提示有以下信息:正在读取软件包列表...完成正在分析软件包的依赖关系树正在读取状态信息...完成您也许需要运行“apt--fix-brokeninstall”来修正上面的错误。下列软件包有未满足的依赖关系:sogoupinyin:依赖:fcitx(>=1:4.2......
  • EasyCVR平台如何正确配置设备移动侦测告警信息的上传?
    EasyCVR视频融合平台基于云边端协同架构,支持海量视频汇聚管理,平台融合性强、拓展灵活、视频能力丰富,具体包括:视频监控直播、轮播、录像、视频转码、云存储、检索与回看、告警上报、电子地图、云台控制、语音对讲、集群、级联共享等。用户在现场部署了EasyCVR,需要将设备的移动侦......
  • EasyCVR平台基于GB28181协议的语音对讲配置操作教程
    EasyCVR基于云边端协同,具有强大的数据接入、处理及分发能力,平台可支持海量视频的轻量化接入与汇聚管理,可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联等功能。其中,语音对讲功能在视频监控场景中具有......
  • Nacos配置管理
    1、Nacos统一配置管理 配置更改热更新  步骤:(1)在左侧栏中的配置管理中选择配置列表,然后点击右上角的+号;(2)在弹出表单中填写配置信息DataID:配置文件的id:【服务名称】-【profile】.【后缀名】Group:分组:默认即可配置内容:建议将一些关键参数,需要运行时调整的参数放到nacos......
  • [OpenCV] VS 2022 中的配置
    1、下载windows版本的opencv(默认vs已经下载)下载链接: ReleasesArchive-OpenCV 2.创建一个桌面工程随后打开【视图】-【属性管理器】找到下图   如果没有这个选项,下载链接: MSBuild.zip_免费高速下载|百度网盘-分享无限制(baidu.com) 密码:9527,存放到C:\U......
  • 配置路由表及登录态校验
    前几天我完成了一个哔哩哔哩的博主视频下的一个react项目,借此项目来巩固学习的知识,这篇文章主要记录我在该项目用到的路由知识配置路由表在src下新建一个router文件夹,在router文件夹下新建index.js和router.jsrouter.js是将将项目中的所有路由引入并制作成一张路由表,在该文件下......