后端主流框架--Spring02

前言:上篇关于Spring的文章介绍了一些Spring的基本知识,此篇文章主要分享一下如何配置Spring环境,如何注入等。

Spring项目构建

导入Spring相关JAR包

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.4.RELEASE</version>
</dependency>

准备Spring配置文件

  1. 在classpath的根目录下新建一个applicationContext.xml配置文件,文件名可以自定义,但是通常使用applicationContext这个名字;

  2. 添加文档声明和约束(这个东西不需要记忆):

    1. 可以参考文档,中英文文档都可以;

      1. spring-framework-4.1.2.RELEASE\docs\spring-framework-reference\pdf

    2. 可以参考资源中的资料;

    3. 可以百度spring的配置文件;

    4. 也可以直接拿以下内容去修改

<?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="..." class="..."><!-- collaborators and configuration for this bean go here --></bean>
</beans>

编写一个类

public class MyBean {public void hello(){System.out.println("hello spring...");}
}

将编写的类交给Spring容器管理

  1. Spring是一个容器,我们需要把我们的类交给Spring去管理。 因为,我们的测试是创建一个普通的类,然后再通过Spring帮我们把这个类的对象创建出来就算是成功了;

  2. 在配置文件中将这个Java类交给Spring管理。在applicationContext.xml中配置

    <beans ...><bean id="myBean" class="org.com.Spring._01_hello.MyBean"></bean>
    </beans>
  3. 元素和属性讲解:

    bean元素:表示对象配置或注册标签;

    id属性:这个bean对象在Spring容器中的唯一标识,也可以使用name,常用id(唯一特性),获取这个对象的时候就可以通过这个表示来获取;

    class属性:对应对象所属类的完全限定名。注意这里可以是JDK自带的类,也可以是自己新建的类;

Spring容器实例化

  1. Spring容器对象有两种:BeanFactory和ApplicationContext;

  2. ApplicationContext继承自BeanFactory接口,拥有更多的企业级方法,推荐使用该类型;

BeanFactory

BeanFactory是一个接口,可以通过其实现类XmlBeanFactory获取其实例。接口中有一个getBean()方法可以获取Spring容器中配置或注册的Bean对象;

@Test
public void testHelloSpring() throws Exception {/***我们第一步是要启动框架,而启动框架则需要拿到Spring的核心对象	*///第一步:读取资源文件Resource resource = new ClassPathResource("applicationContext.xml");//第二步:拿到核心对象 BeanFactoryBeanFactory factory = new XmlBeanFactory(resource);
}

ApplicationContext

ApplicationContext的中文意思是"应用程序上下文",它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,被推荐为JavaEE应用之首选,可应用在Java APP与Java Web中;

加载工程classpath下的配置文件实例化
String conf = "applicationContext.xml";
ApplicationContext factory = new ClassPathXmlApplicationContext(conf);

获取对象方式

方式一:通过id直接拿到相应的Bean对象

//通过[xml]{.ul}中配置的id拿到对象

MyBean bean = (MyBean)factory.getBean("myBean");

System.out.println(bean);

方式二:通过id与对象的Class对象拿到Bean对象(推荐使用)

//通过id与对象的class拿到Bean对象

MyBean bean = factory.getBean("myBean",MyBean.class);

System.out.println(bean);

ApplicationContext与BeanFactory的区别

联系

ApplicationContext是BeanFactory的子类,拥有更多的功能与方法;

区别

ApplicationContext默认是在读取配置文件的时候就会根据配置创建Bean对象(迫切加载)。而BeanFactory是在使用的时候才进行对象的创建(懒加载/延迟加载)

Spring管理bean的方式

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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"
>    <bean id="myBean" class="com.ss._04di._01xml.MyBean"></bean><bean id="otherBean" class="com.ss._04di._01xml.OtherBean"></bean>
</beans>

注解

配置扫描注解

<?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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd
"
><!--扫描组件:通过指定包,就是找到本包或者子孙包下面加了注解Component及@Controller等注解的类,把它交给spring管理就相当于我们xml当中一个一个配置--><context:component-scan base-package="com.ss._04di._02annotation"></context:component-scan>
</beans>

加注解

@Component @Controller @ Service @Repository等注解,后面三个是前一个子注解。其实我们任意用一个都可以,但是为了代码可读性,最好分门别类的使用 。

Controller就用 @Controller 注解

Service就用@Service注解

dao/mapper用@Repository

Spring依赖注入

  1. IoC是一种思想,它的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的;

  2. Spring中的对象都是由Spring进行统一管理,但是在对象中还存在属性,这些属性实际上引用的也是别的对象,那么这些对象也是由Spring来管理的;

  3. 在实际使用时,我们需要给Spring中对象的属性字段赋值,这称为依赖注入DI(Dependency Injection);

  4. 依赖注入又分为xml注入和注解注入;

XML注入

Bean定义:

public class MyBean{private OtherBean otherBean;public void hello(){otherBean.hello();}public void setOtherBean(OtherBean otherbean){this.OtherBean = OtherBean
}
}public class OtherBean{public void hello(){System.out.println("otherbean hello");}
}

xml定义

//xml配置:
<bean id="otherBean" class="org.com.bean.OtherBean"></bean>
<bean id="myBean" class="org.com.bean.MyBean"><property name="otherBean" ref="otherBean"></property>
</bean

测试

//测试:main方法测试
//加载工程classpath下的配置文件实例化
String conf = "applicationContext.xml";
ApplicationContext factory = new ClassPathXmlApplicationContext(conf);

注解注入

使用@Autowired

@Component
public class ServiceBean {@Autowiredprivate DaoBean1 daoBean;public void sayHello(){System.out.println("hello spring!!!!");daoBean.hello();}
}
@Component
public class DaoBean1 {public void hello(){System.out.println("hello DaoBean1!!!!!");}
}
@Component
public class DaoBean {public void hello(){System.out.println("hello DaoBean!!!!!");}
}

使用@Resource

public class MyBean{@Resource //默认按照名字匹配【名字对了,类型也必须一致】,然后按照类型匹配//@Resource(name="otherBean1")//指定Bean的名称private OtherBean otherBean;public void hello(){otherBean.hello();}
}public class OtherBean{public void hello(){System.out.println("otherbean hello");}
}

写在最后

Spring的依赖注入,翻转控制,面向切面编程是其最主要的特点与优势,后续博主也会继续分享相关的文章。博主小,中,大厂均有面试经历,每日分享JAVA全栈知识,希望能与大家共同进步。

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

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

相关文章

泰坦尼克号数据集机器学习实战教程

泰坦尼克号数据集是一个公开可获取的数据集&#xff0c;源自1912年沉没的RMS泰坦尼克号事件。这个数据集被广泛用于教育和研究&#xff0c;特别是作为机器学习和数据分析的经典案例。数据集记录了船上乘客的一些信息&#xff0c;以及他们是否在灾难中幸存下来。以下是数据集中主…

嵌入式实训day3

1、 planet_list["水星","金星","火星","木星"] print(planet_list)planet_list.insert(2,"地球") print(planet_list)planet_list.append("土星") planet_list.append("天王星") planet_list.append(&…

MultiTrust:首个综合统一的多模态信任度基准(上)

随着我们迈向人工通用智能&#xff08;AGI&#xff09;的时代&#xff0c;出现了开创性的大语言模型&#xff08;LLMs&#xff09;。凭借它们强大的语言理解和推理能力&#xff0c;已经无缝地将其他模态&#xff08;例如视觉&#xff09;整合到LLMs中&#xff0c;以理解不同的输…

SSRF学习,刷题

[HNCTF 2022 WEEK2]ez_ssrf 给了一个Apache2的界面&#xff0c;翻译一下 就是一个默认的界面,目录扫描 可以看到flag.php,肯定是不能直接访问得到的&#xff0c;还有index.php&#xff0c;访问这个 可以看到三个参数data,host,port 还有fsockopen() 函数是 PHP 中用于打开一个…

排名前五的 Android 数据恢复软件

正在寻找数据恢复软件来从 Android 设备恢复数据&#xff1f;本指南将为您提供 5 款最佳 Android 数据恢复软件。浏览这些软件&#xff0c;然后选择您喜欢的一款来恢复 Android 数据。 ndroid 设备上的数据丢失可能是一种令人沮丧的经历&#xff0c;无论是由于意外删除、系统崩…

OpenSSL新手教程:加密与安全通信基础

OpenSSL新手教程&#xff1a;加密与安全通信基础 1. 什么是OpenSSL&#xff1f;2. 安装OpenSSL在Linux上安装在Windows上安装 3. OpenSSL基本命令速览生成RSA密钥对生成自签名证书加密与解密文件文件散列计算&#xff08;哈希&#xff09; 4. SSL/TLS握手与HTTPS5. 总结 欢迎来…

HTML静态网页成品作业(HTML+CSS)—— 非遗皮影戏介绍网页(6个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有6个页面。 二、作品演示 三、代…

智慧工地:构筑未来建筑的智能脉络

在科技日新月异的今天&#xff0c;智慧城市的建设已不再局限于城市生活的方方面面&#xff0c;而是深入到了城市发展的每一个细胞——工地。本文旨在深度剖析智慧工地的核心价值、关键技术及对建筑业转型升级的深远影响。 一、智慧工地&#xff1a;定义与愿景 智慧工地是指运…

探囊取物之渐变背景登录页面(基于ElementUI)

低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/preview/lxbupnc9dg5q 演练页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/practice/lxbupnc9dg5q

MYSQL六、存储引擎的认识

一、存储引擎 1、MySQL体系结构 连接层&#xff1a;最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff0c;为…

visio绘制直线

1、右键打开绘图工具 2、选择线条 3、画直线、画横线

【图像隐藏】基于奇异值分解SVD实现数字水印嵌入提取,相关系数NC附Matlab代码

以下是使用奇异值分解&#xff08;SVD&#xff09;实现数字水印嵌入和提取的相关系数&#xff08;NC&#xff09;的Matlab代码示例&#xff1a; matlab % 数字水印嵌入 function watermarked_image embed_watermark(original_image, watermark, strength) % 将原始图像进行S…

【Linux】事件处理模式

文章目录 服务器框架Reactor模式Proactor模式同步I/O模拟Proactor模式线程池 服务器框架 I/O处理单元&#xff1a;处理客户连接、读写网络数据逻辑单元&#xff1a;接收数据后应该做什么例如解析数据、封装响应数据请求队列&#xff1a;I/O处理单元和逻辑单元之间的通信中介&a…

Apache Pulsar 从入门到精通

一、快速入门 Pulsar 是一个分布式发布-订阅消息平台&#xff0c;具有非常灵活的消息模型和直观的客户端 API。 最初由 Yahoo 开发&#xff0c;在 2016 年开源&#xff0c;并于2018年9月毕业成为 Apache 基金会的顶级项目。Pulsar 已经在 Yahoo 的生产环境使用了三年多&#…

C++ 10 之 引用

c10引用.cpp #include <iostream>using namespace std;int main() {// 引用的语法&#xff1a;类型 &别名 原名// int a 10;// int &b a; // 此时a,b指向同一块内存// cout << "a: " << a << endl;// cout << "b: &…

C语言TC中有⼏个画线函数?怎么使⽤?

一、问题 C语⾔中画线的函数好像不⽌ line( )⼀个&#xff0c;那么除了 line( ) &#xff0c;还有哪些画线函数&#xff1f;怎么使⽤&#xff1f; 二、解答 TC中有3种画线的函数&#xff0c;共语法格式如下。 void far line(int x0, int y0, int xl, int y1); void far linet…

【高校科研前沿】北京大学赵鹏军教授团队在Nature Communications发文:揭示城市人群移动的空间方向性

文章简介 论文名称&#xff1a;Unravelling the spatial directionality of urban mobility 第一作者及单位&#xff1a;赵鹏军&#xff08;教授|第一作者|北京大学&#xff09;&王浩&#xff08;博士生|共同一作|北京大学&#xff09;; 通讯作者及单位&#xff1a;赵鹏军…

微服务 | Springboot整合Dubbo+Nacos实现RPC调用

官网&#xff1a;Apache Dubbo 随着互联网技术的飞速发展&#xff0c;越来越多的企业和开发者开始关注微服务架构。微服务架构可以将一个大型的应用拆分成多个独立、可扩展、可维护的小型服务&#xff0c;每个服务负责实现应用的一部分功能。这种架构方式可以提高开发效率&…

MAVEN-SNAPSHOT和RELEASE

一、快照版本SNAPSHOT和发布版本RELEASE区别 快照版本SNAPSHOT和发布版本RELEASE区别-CSDN博客 在使⽤maven过程中&#xff0c;我们在开发阶段经常性的会有很多公共库处于不稳定状态&#xff0c;随时需要修改并发布&#xff0c;可能⼀天就要发布⼀次&#xff0c;遇到bug时&am…

使用MySQL全文索引实现高效搜索功能

MySQL全文索引是MySQL提供的一种高效的搜索功能&#xff0c;可以快速地搜索文本内容。全文索引可以用于搜索大量文本数据&#xff0c;通常应用在文章、博客、论坛等需要搜索的场景中。 什么是MySQL全文索引 MySQL全文索引是一种用于快速搜索文本内容的索引技术。它可以在存储和…