成都网站建设设计

将想法与焦点和您一起共享

Java高效率复习-Spring[Spring]-创新互联

前言

Spring的学习还是很简单的,到SpringMVC的时候则会比较复杂了,因为要创建Web项目以及一些Web因素等等。

成都创新互联是专业的武城网站建设公司,武城接单;提供成都做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行武城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!Spring的简介

在这里插入图片描述
在这里插入图片描述

Spring入门案例

导入依赖

jarorg.springframeworkspring-context5.3.1junitjunit4.12test

在这里插入图片描述
在这里插入图片描述
对象在Spring中被称为Bean,现在先基于XML来管理Bean。
创建Spring的XML文件

@Test
    public void testSpring(){//获取IOC容器
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //取出Bean对象实例
        HelloWorld hello = ioc.getBean("hello", HelloWorld.class);
        //调用对象实例方法
        hello.sayHello();
    }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一种是2个形参,传入了泛型参数,如果不传入就像②所示一样,需要进行强制类型转换,第三种方式是只传入了Bean的实际类型。

IOC容器创建对象的方式

IOC通过底层类型反射来默认使用无参构造器创建的对象,所以POJO对象一定要有无参构造。

获取bean的三种方式和注意事项
@Test
    public void test(){ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过bean的id获取的对象是Object,需要进行强制类型转换
        //Student studentOne = (Student) ioc.getBean("studentOne");
        //通过类型匹配则一定是获取的对应类型,如果有两个相同类型不同id的bean,则只能id+class来获取
        //Student student = ioc.getBean(Student.class);
        //若没有任何一个类型匹配的bean,则抛出异常:NoSuchBeanDefinitionException
        //若有多个类型匹配的bean,则抛出异常:NoUniqueBeanDefinitionException
        Student student = ioc.getBean("studentOne",Student.class);
        System.out.println(student);
        //在IOC中一个类型的bean配置一次就行了,因为默认是单列的
        //IOC中的bean不能是接口,普遍用法都是id是接口名,class是接口实现类
}

在这里插入图片描述

依赖注入

setter注入是指Spring利用setter方法来将A依赖的B对象赋值。
构造器注入是指Spring利用构造器来注入依赖,在保存到核心容器前,依赖就已经完成了。
在这里插入图片描述
该操作是用于基本类型或其包装类类型的注入,不过依赖注入大部分时候还是应用于实体类依赖的注入。
在这里插入图片描述
构造器注入更符合高内聚的规范。

null值

如果想要给一个属性设置null,是不能直接通过value="null"设置的,因为这样会被当成一个字面量,相当于是一个字符串null。
在这里插入图片描述

使用property的子元素标签null元素来完成赋值

在这里插入图片描述
value也算是一个元素,不过普遍还是将value作为属性来进行赋值。
在这里插入图片描述

依赖注入为类类型赋值

这些详细的内容,在Spring基础使用的文章有很详细的描述。
级联方式赋值
在这里插入图片描述
该作用并没有什么实际意义,因为只有clazz先初始化才能这样操作,所以相当于覆盖了已经依赖注入好了的clazz的属性值。
内部bean
在这里插入图片描述
为数组类型赋值
在这里插入图片描述
如果数组里是类对象,则用ref即可。
为集合类型的属性赋值
在这里插入图片描述
在这里插入图片描述
map集合赋值
在这里插入图片描述
p命名空间
在这里插入图片描述
如果引用的属性是字面量则直接使用无ref的后缀属性即可。
在这里插入图片描述

Spring管理数据源和引入外部属性文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bean的作用域

在这里插入图片描述

bean的声明周期

在这里插入图片描述

FactoryBean

在这里插入图片描述
在这里插入图片描述
是否单例是一个默认方法,默认返回true。
在这里插入图片描述
获取时直接传入user的class类型即可。

基于XML的自动装配

比如三层架构,Controller、Service、DAO,它们之间都是依次向下依赖的,控制层有服务层的实例,服务层有DAO的实例,它们在类中是硬编码的形式。
在这里插入图片描述
我们将三个组件交给Spring的IOC容器,添加依赖注入的setter和getter方法:
在这里插入图片描述
在这里插入图片描述
不使用自动装配的依赖注入
在这里插入图片描述
在这里插入图片描述
控制层调用服务层的方法,然后服务层的方法调用DAO层的方法。
所以在运行时只需要调用控制层即可。

基于xml的自动装配之byType

在这里插入图片描述
autowirte表示自动装配属性,no表示不装配,default就表示no,byType表示根据类型自动装配。
在这里插入图片描述
如果类型匹配搜索到两个同样的类型,但是id不同的情况,则编译就会直接报错。
在这里插入图片描述
在这里插入图片描述
一个类型的bean一般在IOC里只设置一次,因为一般都是单例。

基于xml的自动装配之byName

该设置用于处理如果有两个相同但id不同的bean对象时设置。
在这里插入图片描述

基于注解管理bean

在这里插入图片描述
在这里插入图片描述

基于注解管理bean之注解和扫描

在这里插入图片描述
四个注解功能一模一样,名称是给程序员看的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这两个都是接口,要把注解写到实现类上,控制层是一个正常的类。
在这里插入图片描述
完成上面三层架构的创建以及注解的标记后,在spring配置文件中添加扫描设置:

在这里插入图片描述
下面可以测试一下,不过此时如果有依赖对象,则是没有的,需要用注解的自动装配来标记一下,让Spring去扫描并自动装配依赖关系。

在这里插入图片描述

基于注解管理bean之扫描组件

当Spring和SpringMVC在一起的时候,可能会出现同一个组件扫描了两次的情况,为了避免这种情况,我们可以设置Spring扫描组件的配置:
在这里插入图片描述
排除扫描

在type里有这两个比较常用的属性。
在这里插入图片描述
经过如下配置,Spring会排除对全类名所标识的类的扫描:

在这里插入图片描述
经过扫描排除后,再次执行,框架会抛出没有找到组件的异常,虽然添加了控制层注解,但是因为排除扫描,所以最终并没有扫描到控制层组件。
在这里插入图片描述
扫描层的排除结果并不会影响其他两个组件的运行。
下面是类类型排除扫描的写法。

在这里插入图片描述

其实和注解排除差不多效果(第一个是排除了属于控制层注解的组件,第二个则只是单个类,此处肯定效果差不多,因为只有一个控制层)。这里的type的assignable表示根据类的类型排除,上面是根据注解排除,用的比较多的是第一种,在SSM整合时的场景,SpringMVC扫描控制层,Spring扫描控制层以外的组件。
包含扫描

在这里插入图片描述

上面设置表示包含扫描,默认不全部扫描,只扫描include(包含)标签设置的组件。
在这里插入图片描述
因为设置了只扫描Controller组件,所以发生了其他组件的未找到异常。
因为排除本身就只是排除,所以全部扫描的设置是无需必须设置的。
在这里插入图片描述
第一种排除扫描是用的最多的,也是最实用的。
我们一般就是一句:

在这里插入图片描述
扫描全部组件,直接就完事了。

基于注解管理bean之bean的id

扫描组件后,Spring容器为扫描的bean组件自动设置了一个id,注解+扫描得到的bean组件的id默认为类的小驼峰:比如控制层的UserController,那么默认的id就是userController。
在这里插入图片描述
自定义组件id
我们可以看到,不论是哪个注解(上面的四个组件),它们都有一个String value的注解属性。
在这里插入图片描述
这个是让我们用来指定自定义的组件id的,默认是类名的小驼峰,如下程序示例了自定义注解扫描的id。
在这里插入图片描述
在这里插入图片描述
可以看到,我们在对@Controller传入了一个String参数时,原来的类名小驼峰就失效了,此时我们只有传入我们刚刚自定义的String参数才能再次获取到扫描组件实例对象。
在这里插入图片描述
一般获取bean对象都是通过类型获取,id获取比较少,所以一般都是默认id->类名小驼峰。

基于注解的自动装配之@Autowired注解能够标识的地方

前面只是说到了各个组件的bean扫描,还没有提到依赖注入的自动装配,下面通过@Autowired来完成依赖注入,不过先来看看该注解都可以标识在哪些地方。
setter方法上
在这里插入图片描述
成员变量上
在这里插入图片描述
成员变量的有参构造上
在这里插入图片描述
在这里插入图片描述

基于@AutoWirte自动装配的原理

在这里插入图片描述

该注解是指定某个bean的id,将这个bean为属性赋值。
在这里插入图片描述

自动装配@Autowired的注意事项

一般默认的byType就行了,我们根本不会设置两个同样类型的bean并且id还不和属性同名。
所以直接@Autowired就行了。
在这里插入图片描述
必须自动装配

在这里插入图片描述
如果没有bean进行装配就会报错,可以设置为false,那么如果没有可装配就不装配了,值是null。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:Java高效率复习-Spring[Spring]-创新互联
标题来源:http://chengdu.cdxwcx.cn/article/cdhpsi.html