Spring七天速成:入门必看(二)

news2024/12/28 18:36:16

-----持续更新Spring入门系列文章-----

如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!

你的点赞、关注、评论、是我创作的动力!

-------希望我的文章对你有所帮助--------

前言在前篇文章当中我们已经大概了解了Spring的基本原理和简单实例的编写测试,那么本篇将对Spring对于Bean的管理开展进一步的讲解和运用。

目录

一、什么是Bean?

1.1  Bean的配置

1.2 Bean的常用子元素

二、实例工厂实例化

2.1 引入pom依赖

2.2 创建一个类

2.3 创建工厂

 2.4 配置applicationContext

2.5 工厂实例的测试类

2.6 测试结果

三、Bean的作用域

四、装配方式

4.1 基于XML的setter的注入

4.2 基于XML的构造方法的注入

4.3 基于注解的装配

五、注解实例

5.1 编写基本类

5.2  编写Dao层接口

5.3 编写Dao层实现类

5.4 编写ServiceDao层

5.5 编写Service实现类

5.6 编写Controller类

5.7 编写测试类

5.8 测试结果

六、总结


一、什么是Bean?

        Bean是在Spring中注册的Java类,可以看做是添加到Spring容器里的一个管理对象。只有通过将Java类注册为其中的一个Bean时,也即是getBean()过程,才能使得Spring对其进行下一步管理。

1.1  Bean的配置

属性描述
id即Bean对应的唯一标识符
name可以有多个名称,用逗号隔开,即代表Bean的内涵或作用
class即具体实现类,一般为对象的全路径
scopeBean实例的作用范围,如singleton、prototype、request、session

1.2 Bean的常用子元素

元素描述
<constructor-arg>
  • index:用于设置构造参数的序号
  • type:用于指定构造参数类型
  • ref:用于指定参数的值
  • value(同上)
<property>
  • name:即Bean中成员变量的属性名(username、uid、uadress、usex)
  • value:设定该参数值
  • ref:(同上)
<value>

即上述两种注入方式对应的子元素的属性参数的赋值

<ref>(同上)

二、实例工厂实例化

        工厂实例化,实际上也是将工厂类做为一个Bean注册到Spring容器中,通过控制工厂类来实现对于实例的创建,接下来演示一个实例工厂实例,可以让我们更好的了解工厂模式在Spring中的运作规。

2.1 引入pom依赖

代码略

2.2 创建一个类

package com.itheima;
public class Bean1 {
    public Bean1() {
        System.out.println("这是Bean1!");
    }
}

2.3 创建工厂

        创建一个工厂,构造方法显示当前实例正在生成,以及创建一个生成类的方法

package com.itheima;

public class MyBeanFactory {
    public MyBeanFactory()
    {
        System.out.println("bean工厂实例化中!");
    }
    public Bean1 createBean()
    {
        return new Bean1();
    }

}

 2.4 配置applicationContext

        注意此处将工厂类注册为一个Bean,填写其class后,将再次把工厂类作为一个Bean,使用factory-bean来标明工厂类,且已factory-method标明工厂方法。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">
        <bean id="MybeanFactory" class="com.itheima.MyBeanFactory"></bean>
        <bean id="bean1"  factory-bean="MybeanFactory" factory-method="createBean">
        </bean>

</beans>

2.5 工厂实例的测试类

        使用ApplicationContext作为Spring的容器,将注册的Bean注入,再通过获取Bean来实例化工厂类,以及自动实现工厂方法。

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String args[])
    {
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationBean1.xml");
        System.out.println(applicationContext.getBean("bean1"));
    }
}

2.6 测试结果

三、Bean的作用域

作用域描述
singleton即单例模式,实际只创建一个实例
prototype即原型模式,每次请求都产生一个新的实例
request作用于Web,每一个HTTP请求都会有实例
session作用于Web,每一个HTTPSessioon请求都会有一个实例
global session作用于Web,限定为HTTPSession的生命周期

四、装配方式

4.1 基于XML的setter的注入

即上文中提到的setXX()以及getXX()的方法来进行赋值的方法,较为容易理解。

4.2 基于XML的构造方法的注入

即通过构造方法来对类中的成员变量进行直接的赋值的方法。

4.3 基于注解的装配

  当一个项目的Bean过多时,通过XML的装配方式,会使得applicationContext文件中内容较为臃肿,那么此时就可以用到注解来解决相关问题。

以下是常用注解:

注解描述
@Component即一个普通Bean,作用于任何层次
@Controller即控制组件Bean,用于控制层
@Service即业务逻辑Bean,用于业务层
@Repository即数据访问Bean,用于数据访问层
@Scope即Bean实例的作用域
@Value即Bean实例的注入值
@Autowired指自动装配对象
@Resource指要注入的对象
@PostConstruct指实例初始化完成之后调用的方法
@Qualifier自动装配的对象名称,通常与@Autowired联用
@PreDestory指实例销毁前调用的方法

五、注解实例

结构图:

5.1 编写基本类

package com.itheima.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("user")
@Scope("singleton")
public class User {
    @Value("1")
    private int id;
    @Value("Zhuang San")
    private String name;
    @Value("1234")
    private String password;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

5.2  编写Dao层接口

package com.itheima.Dao;
public interface UserDao {
    public void save();
}

5.3 编写Dao层实现类

package com.itheima.Dao;
import com.itheima.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
    public void save(){
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext2.xml");
        User user=(User) applicationContext.getBean("user");
        System.out.println(user);
        System.out.println("Executing UserDaoImpl.save() ");
    }

}

5.4 编写ServiceDao层

package com.itheima.Service;
public interface UserService {
    public void save();
}

5.5 编写Service实现类

package com.itheima.Service;
import javax.annotation.Resource;
import com.itheima.Dao.UserDao;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService{
    @Resource(name="userDao")
    private UserDao userDao;
    public void save(){
        this.userDao.save();
        System.out.println("Executing UserServiceImpl.save()");
    }
}

5.6 编写Controller类

package com.itheima.Controller;
import com.itheima.Service.UserService;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
@Controller
public class UserController {
    @Resource(name="userService")
    private UserService userService;
    public void save(){
        this.userService.save();
        System.out.println("Executing UserController.save() ");
    }

}

5.7 编写测试类

import com.itheima.Controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnotationText {
    public static void main(String args[]){
        ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext2.xml");
        UserController userController=(UserController) applicationContext.getBean("userController");
        userController.save();
    }
}

5.8 测试结果

六、总结

        本期文章主要是关于Bean的基本装配的了解,以及基于注解实现实例的讲解,对于Spring的运用也有更加深刻的理解,下次再见!

感谢爱学习的你看到了最后,点个赞、关注支持一下吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT布局之QGridLayout嵌套QHBoxLayout

搞嵌入式系统开发的&#xff0c;往往都是真全栈开发者。从硬件到驱动到操作系统到应用以及功能界面&#xff0c;是哪里需要搞哪里。这不&#xff0c;最近需要开发一个基于QT的界面功能&#xff0c;涉及到控件布局。因为不熟悉&#xff0c;走了一些弯路。这里将相关调试记录下来…

计算机网络面试题【面试】

计算机网络面试题前言OSI 七层网络模型应用层表示层会话层传输层网络层数据链路层物理七层总结输入URL后会发生什么1. DNS域名解析2. 三次握手建立TCP连接3. 发送HTTP网络请求4. 服务器处理请求5. 服务器返回响应6. 四次挥手断开TCP连接7. 解析HTMLDNS解析过程DNS解析&#xff…

Froala Editor JavaScript WYSIWYG HTML 编辑器

Froala Editor JavaScript WYSIWYG HTML 多用途、易于使用的 WYSIWYG 编辑器&#xff0c;优雅 每次点击&#xff0c;我们都会让网络编辑变得更简单、更强大、更愉快 安全、快速、智能和稳健。 Froala Editor 是一个 用 JavaScript 编写 的轻量级 WYSIWYG HTML 编辑器&#xff0…

【计算机毕业设计】小型OA系统设计与实现Springboot

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括小型OA系统设计与实现的网络应用&#xff0c;在国外小型OA系统设计与实现已经是很普遍的方式&#xff0c;不…

G1D17-研究方向rce45-49不快乐就去敲敲代码

现在每天晚上都觉得一天结束的好快呀~每天早上都很幸福&#xff0c;因为还有一天的时间呐&#xff01;&#xff01;&#xff01; 今天主要的事情是完成老师的作业——论文主题阅读的report&#xff0c;看一下动态规划&#xff08;emm最近喜欢啃这种让人掉头发的问题~&#xff0…

JADE: Adaptive Differential Evolution withOptional External Archive

0、论文背景 本文在DE的基础上&#xff0c;提出了一种新的差分进化(DE)算法JADE&#xff0c;通过实现一种新的突变策略DE/current-to-pbest&#xff0c;采用可选的外部存档和参数的自适应更新&#xff0c;来提高优化性能。上述两种操作使种群多样化&#xff0c;并提高了收敛性…

Mybatis源码解析(六):缓存执行器操作流程

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

【附源码】Python计算机毕业设计图书共享系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Bootstrap(三)

目录&#xff1a; &#xff08;1&#xff09;bootstrap响应式工具 &#xff08;2&#xff09;bootstrap实例导航 &#xff08;1&#xff09;bootstrap响应式工具 class加属性&#xff1a; visible-xs&#xff1a;隐藏显示&#xff0c;当屏幕宽度小于等于xs的时候显示、 vis…

如何使用轻量应用服务器搭建Typecho个人博客系统?

之前有写过WordPress搭建博客的教程&#xff1a;如何使用轻量应用服务器搭建WordPress个人博客 有的小伙伴感觉WordPress比较臃肿&#xff0c;有没有比较简洁的博客系统呢&#xff0c;今天就把Typecho搭建个人博客的操作方法分享给大家&#xff0c;需要的小伙伴可以参考以下。 …

注解的使用

1. 注解概述 1.1 注解概述、作用 Java 注解&#xff08;Annotation&#xff09;又称 Java 标注&#xff0c;是 JDK5.0 引入的一种注释机制。Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。 1.2 注解的作用是什么 2. 自定义注解 2.1 自定义注解 —…

大数据之Hive基本查询

文章目录前言一、Hive基本查询&#xff08;一&#xff09;普通查询&#xff08;二&#xff09;Join查询&#xff08;三&#xff09;排序查询总结前言 #博学谷IT学习技术支持# 这一次主要介绍Hive的基本查询以及相关函数&#xff0c;Hive的查询以及函数用法与MySQL不尽相同&…

自动化立体仓库系统实训

实训目的 理解被控对象&#xff0c;控制系统关系&#xff1b;逻辑流程任务综合训练&#xff1b;仓储智能管理实现&#xff1b;工业系统整体调试&#xff1b; 实训设备 虚拟仿真被控对象&#xff1b;S7-300控制器及实验台接口&#xff1b;DAQ信号板卡及继电器模块&#xff1b; 设…

基于划分的方法、K-均值算法、K-medoids、K-prototype(机器学习)

目录 基于划分的方法 K-均值算法 k-均值算法聚类步骤如下&#xff1a; K-均值算法优缺点 K-medoids算法 K-prototype算法 基于划分的方法 1、基于划分的方法是简单、常用的一种聚类方法&#xff1b; 2、通过将对象划分为互斥的簇进行聚类&#xff0c; 每个对象属于且仅属…

Python学习基础笔记九——集合

集合&#xff1a;可变的数据结构&#xff0c;元素必须是不可变的数据类型&#xff0c;无序&#xff0c;不重复&#xff08;去重&#xff09;。 数据集的方法&#xff1a; 方法功能S.add(tom)增加一个元素S.update(abc)增加一个可迭代元素&#xff0c;每个元素都分别添加进去S.…

[附源码]java毕业设计网上博物馆设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

《计算机视觉技术与应用》-----第五章 边缘和轮廓

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

【人工智能】MindSpore Hub

目录 前言 一、什么是MindSpore Hub 1.简单介绍 2.MindSpore Hub包含功能 3.MindSpore Hub使用场景 二、安装MindSpore Hub 1.确认系统环境信息 2.安装 3.下载源码 4.进行验证 三、加载模型 1.介绍 2.推理验证 3.迁移学习 四、模型发布 前言 MindSpore着重提升易…

营造激发自驱力注重培养学习力的想法一

目录背景过程第一节&#xff1a;第二节&#xff1a;第三节&#xff1a;总结升华背景 小编做的是教育类公司&#xff0c;其实无论是做公司的产品&#xff0c;还是对于公司团队人员的培养&#xff0c;都需要去思考教育这件事&#xff0c;尤其是激发自驱力培养学习力&#xff1b;…

常用的框架07-消息中间件-RabbitMQ

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录1.消息中间件概述1.1 为什么学习消息队列1.2 什么是消息中间件1.3 消息队列应用场景1.3.1 异步处理1.3.2 应用程序解耦合1.3.3 削峰填谷1.3.4 什么是QPS1.3.5 什么是…