Spring见解2

3.基于注解的IOC配置

学习基于注解的IOC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。4

3.1.创建工程

在这里插入图片描述

3.1.1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring</artifactId>
        <groupId>com.by</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.by</groupId>
    <artifactId>Spring_IOC_Annotation</artifactId>

    <properties>
        <!-- 项目源码及编译输出的编码 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- 项目编译JDK版本 -->
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- Spring常用依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.30</version>
        </dependency>
    </dependencies>
</project>

3.1.2.dao

package com.by.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserDaoImpl implements UserDao{

    @Override
    public void addUser(){
        System.out.println("insert into tb_user......");
    }
}

3.1.3.service

package com.by.service;

import com.by.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Service
@Scope("prototype")
public class UserServiceImpl implements UserService{
    //@Resource(name="userDaoImpl") //按名称从容器中获得bean,并注入给userDao
    @Autowired
    private UserDao userDao;
    @Value("${name}")//${name}:从ioc容器中获得“name”的值,@Value():并注入给name
    private String name;
    @Value("${age}")
    private Integer age;
    @Override
    public void addUser() {
        System.out.println(userDao+"     "+name+"      "+age);
        userDao.addUser();
    }
}

3.2.IOC

3.2.1.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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 ">
    <!--加载config.properties配置文件,并把配置文件中的数据存到IOC容器中-->
    <context:property-placeholder location="config.properties"></context:property-placeholder>
    <!--
        告诉spring,容器启动时要扫描的包,且spring会依据注解创建对象并存到IOC容器中
    -->
    <context:component-scan base-package="com.by"></context:component-scan>
</beans>

3.2.2.dao

package com.by.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserDaoImpl implements UserDao{

    @Override
    public void addUser(){
        System.out.println("insert into tb_user......");
    }
}

3.2.3.service

package com.by.service;

import com.by.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Service
@Scope("prototype")
public class UserServiceImpl implements UserService{
    //@Resource(name="userDaoImpl") //按名称从容器中获得bean,并注入给userDao
    @Autowired
    private UserDao userDao;
    @Value("${name}")//${name}:从ioc容器中获得“name”的值,@Value():并注入给name
    private String name;
    @Value("${age}")
    private Integer age;
    @Override
    public void addUser() {
        System.out.println(userDao+"     "+name+"      "+age);
        userDao.addUser();
    }
}

3.3.DI

3.3.1.service

package com.by.service;

import com.by.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Service
@Scope("prototype")
public class UserServiceImpl implements UserService{
    //@Resource(name="userDaoImpl") //按名称从容器中获得bean,并注入给userDao
    @Autowired
    private UserDao userDao;
    @Value("${name}")//${name}:从ioc容器中获得“name”的值,@Value():并注入给name
    private String name;
    @Value("${age}")
    private Integer age;
    @Override
    public void addUser() {
        System.out.println(userDao+"     "+name+"      "+age);
        userDao.addUser();
    }
}

3.3.2.测试

package com.by.web;

import com.by.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class client {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = ac.getBean("userServiceImpl", UserService.class);
        userService.addUser();

        for (int i = 0; i < 5; i++) {
            UserService userServicei = ac.getBean("userServiceImpl", UserService.class);
            System.out.println(userServicei);
        }
    }
}

3.3.常用注解

3.3.1.用于创建对象的

以下四个注解的作用及属性都是一模一样的,都是针对一个的衍生注解只不过是提供了更加明确的语义化。

3.3.1.1.@Controller
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于表现层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

3.3.1.2.@Service
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于业务层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

  • 案例

//@Service("userService")声明bean,且id="userServiceImpl"
@Service//声明bean,且id="userServiceImpl"
public class UserServiceImpl implements UserService {
 	...   
}
3.3.1.3.@Repository
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于持久层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

  • 案例

//@Repository("userDaoImpl")声明bean,且id="userDaoImpl"
@Repository//声明bean,且id="userDaoImpl"
public class UserDaoImpl implements UserDao {

    @Override
    public void addUser(){
        System.out.println("insert into tb_user......");
    }
}
3.3.1.4.@Component
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;通用。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

3.3.1.5.@Scope
  • 作用:

    指定bean的作用域范围。

  • 属性:

    value:指定范围的值,singleton prototype request session。

3.3.2.用于属性注入的

以下四个注解的作用相当于:<property name="" ref="">

3.3.2.1.@Autowired
  • 作用:

    自动按照类型注入。set方法可以省略。

  • 案例:

@Service
public class UserServiceImpl implements UserService {

    @Autowired //注入类型为UserDAO的bean
    private UserDao userDao;

    public void addUser(){
        userDao.addUser();
    }
}
3.3.2.1.@Resource
  • 作用:

    自动按照名字注入。set方法可以省略。

  • 属性:

​ name:指定bean的id。

  • 案例:
@Service
public class UserServiceImpl implements UserService {

    @Resource(name="userDaoImpl")//注入id=“userDaoImpl”的bean
    private UserDao userDao;

    public void addUser(){
        userDao.addUser();
    }
}
3.3.2.1.@Value
  • 作用:

    注入基本数据类型和String类型数据的

  • 属性:

​ value:用于指定值

  • 案例一
@Service
public class UserServiceImpl implements UserService {

    @Resource(name="userDaoImpl") //注入id=“userDaoImpl”的bean
    private UserDao userDao;
    @Value("张三")//注入String
    private String name;
    @Value("18")//注入Integer
    private Integer age;

    public void addUser(){
        System.out.println(name+","+age);
        userDao.addUser();
    }
}
  • 案例二
  1. 创建config.properties
name=张三
age=18
  1. 加载配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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 ">
    <!--加载config.properties-->
    <context:property-placeholder location="config.properties"/>
    <context:component-scan base-package="com.by"></context:component-scan>
</beans>
  1. 注入属性值
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
    @Value("${name}")//注入String
    private String name;
    @Value("${age}")//注入Integer
    private Integer age;

    public void addUser() {
        System.out.println(name+","+age);
        userDao.addUser();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/295741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python面试pytorch面试

python面试 python中啥类型是不可更改的&#xff0c;啥类型是可以更改的 为什么Python执行速度慢&#xff0c;我们如何改进它&#xff1f; 自己总结&#xff1a; 1c语言属于编译型语言&#xff1a; 它的代码经过编译后再运行&#xff0c;执行速度快&#xff1b;不能跨平台&am…

SpringIOC之support模块DelegatingMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例 以及 启动

对于一个TcpServer来说&#xff0c;它的灵魂是什么&#xff1f;就是需要提供一个事件循环EventLop(EventLoop)&#xff0c;不停地去检测有没有客户端的连接到达&#xff0c;有没有客户端给服务器发送数据&#xff0c;描述的这些动作&#xff0c;反应堆模型能够胜任。当服务器和…

图像处理中的DCT变换

图像处理中的DCT变换 Discrete Cosine Transform&#xff0c;离散余弦变换。 来源及公式推导&#xff0c;可以查看下面链接&#xff0c;介绍的比较详细&#xff0c;这里就不再重复说明了&#xff1a; 详解离散余弦变换&#xff08;DCT&#xff09; - 知乎 (zhihu.com)DCT变换…

DS|图(连通与生成树)

题目一&#xff1a;DS图 -- 图的连通分量 题目描述&#xff1a; 输入无向图顶点信息和边信息&#xff0c;创建图的邻接矩阵存储结构&#xff0c;计算图的连通分量个数。 输入要求&#xff1a; 测试次数t 每组测试数据格式如下&#xff1a; 第一行&#xff1a;顶点数 顶点…

VsCode开发工具的入门及基本使用

大家好&#xff0c;我是[阿猫的故乡]。很高兴能有机会与大家分享关于VsCode开发工具的入门及基本使用的知识。 文章目录 文章目录 前言 一、VsCode是什么&#xff1f; 二、使用步骤 1.如何下载 2.如何使用 总结 前言 在开发者社区中&#xff0c;Visual Studio Code&#xff08…

IPv6路由协议---IPv6静态路由

IPv6路由协议 路由是数据通信网络中最基本的要素。路由信息就是知道报文发送的路径信息,路由的过程就是报文转发的过程。 根据路由目的地的不同,路由可划分: 1.网段路由:目的地为网段,IPv4地址子网掩码长度小于32位或IPv6地址前缀长度小于128位。 2.主机路由:目的地为主…

算法第十一天-递增顺序搜索树

递增顺序搜索树 题目要求 解题思路 1.二叉搜索树&#xff08;BST&#xff09; 2.任意两个不同节点 遇到二叉搜索树&#xff0c;立即想到这句话&#xff1a;[二叉搜索树&#xff08;BST&#xff09;的中序遍历是有序的]。这是解决所有二叉搜索树问题的关键。 要求BST的任意两…

小H靶场笔记:DC-4

DC-4 January 4, 2024 2:37 PM Tags: teehee提权 Owner&#xff1a;只惠摸鱼 信息收集 探测靶机ip&#xff0c;发现应该是192.168.199.134 扫一下开放端口&#xff08;22、80&#xff09;、服务、版本、漏洞 根据扫描结果&#xff0c;在80端口可能有CSRF漏洞&#xff0c;…

关于目标检测任务中,YOLO(txt格式)标注文件的可视化

1. 前言 本文是针对yolo标注格式txt文件的可视化脚本介绍 如果是VOC格式的xml文件&#xff0c;参考&#xff1a;关于目标检测任务中&#xff0c;XML(voc格式)标注文件的可视化 代码比较简单&#xff0c; 50行这样 。。。。 下面是代码的目录结构&#xff0c;1.jpeg 是数据…

Jenkins接口调用

Jenkins是好用&#xff0c;但是接口文档写的稀烂 1、授权&#xff0c;Jenkins不推荐使用创建单个任务时创建的token&#xff0c;推荐这个用户下的创建user token。 点击自己账号信息&#xff0c;即可创建token。 2、postman选择basic auth&#xff0c;输入账号密码&#xff0…

有网友希望我推荐几个创建产品手册工具,这不就来了!

上次我有说到&#xff0c;企业应该充分认识到产品手册的重要性&#xff0c;并采取有效的策略和措施来制作和传播高质量的产品手册&#xff0c;以提升品牌知名度和市场份额。后台有网友问我除了设计排版的那种产品手册工具&#xff0c;还有什么方式可以去做产品手册。今天就介绍…

力扣题:高精度运算-1.4

力扣题-1.4 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;306. 累加数 解题思想&#xff1a;首先先通过secondStart和secondEnd可以确定num1 num[0:secondStart],num2 num[secondStart:secondEnd]&#xff0c;然后遍历secondStart和secondEnd…

鸿蒙系列--动态共享包的依赖与使用

一、前言 HarmonyOS的共享包相当于Android的Library&#xff0c;在HarmonyOS中&#xff0c;给开发者提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包 区别&…

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变,Kotlin

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变&#xff0c;Kotlin 设置背景颜色渐变&#xff1a; private var iv: ImageView? nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activit…

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机掉线自动重连&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像转换为OpenCV的Mat图像的技术背景在NEOAPI SDK里实现相机图像转换为Mat图像格式联合OpenCV实现相机图像转换为Mat图像格式测试演示图 工业相机…

macOS系统卡顿光标转圈圈

macOS系统卡顿转圈圈 可以试试以下方法&#xff0c;&#xff08;也可能是其他原因&#xff09;仅供参考&#xff0c;不好使别骂我 当电脑出现卡顿&#xff0c;可以尝试清理缓存目录 点击访达你的用户名字上的磁盘&#xff0c;点击系统 点击这个资源库&#xff0c;然后找到【…

全网最全fiddler使用教程和fiddler如何抓包(fiddler手机抓包)-笔者亲测

一、前言 抓包工具有很多&#xff0c;比如常用的抓包工具Httpwatch&#xff0c;通用的强大的抓包工具Wireshark.为什么使用fiddler?原因如下&#xff1a; 1.Wireshark是通用的抓包工具&#xff0c;但是比较庞大&#xff0c;对于只需要抓取http请求的应用来说&#xff0c;似乎…

Spring整合MyBatis项目代码示例

文章目录 Spring整合MyBatis项目代码示例1、创建如下结构的项目Spring_MyBatis2、在pom.xml文件中添加以下依赖并刷新maven3、在resources文件夹下添加spring等配置文件&#xff08;applicationContext.xml&#xff0c;db.properties&#xff0c;log4j.properties&#xff09;4…

x-cmd pkg | procs - ps 命令的现代化替代品

目录 简介首次用户功能特点类似工具进一步阅读 简介 procs 是用 Rust 编写的 ps 替代品&#xff0c;用于显示有关任务进程的信息 首次用户 使用 x procs 即可自动下载并使用 在终端运行 eval "$(curl https://get.x-cmd.com)" 即可完成 x 命令安装, 详情参考 x-cmd…