1.spring的下载地址
https://repo.spring.io/libs-release-local/org/springframework/spring/
这是spring的下载地址,版本看自己需要下载相应版本.
如果用idea的话就不用下载了直接再pom.xml中添加依赖就可以自己下载了
xml
<dependencies>
<!-- Spring IOC最小依赖是beans、context,我们引入context依赖,maven会自动将beans依赖一并引入 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
</dependencies>
spring IOC
ApplicationContext实现类
1 ClassPathXmlApplicationContext类 ------引入xml的配置文件
2.AnnotationConfigApplicationContext类---------引入用注解的方式配置的类(类.class)
3.FileSystemXmlApplicationContext ----这个方法是从文件绝对路径加载配置文件
4.XmlWebApplicationContext ------是专为Web工程定制的。
Application初始化路径
1.路径前缀 classPath 说明这个文件是从类路径下加载的
2.路径中的通配符,可以用通配符匹配路径
通过xml方式管理bean
新建一个xml文件 ,编写配置文件
```xml
*注意的是:schema这里 的约束地址不要用https 否则每次都要从spring加载,无网不能运行,有网的时候也会小概率出错*
<?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/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置注解扫描包路径 -->
<context:component-scan base-package="com.aaa.spring" />
<!-- 把Student类配置进来,实例 Student对象-->
<bean id = "student" class="com.aaa.spring.bean.Student"></bean>
</beans>
通过注解的方式,管理bean
注解配置的优缺点:
优点: 配置简单。由于Java类中已经包含很上下文信息,所有在Java类上直接加注解可以省略很多属性。
缺点:对代码有侵入性,如果改了是基于注解的配置信息改变了,需要重新编译、打包
注意: 注解的要先与xml配置方式注入,这也就意味着如果你在注解和xml中都配置了某项配置,那么xml中的配置会覆盖掉注解中的配置。
在xml配置文件中通过context命名空间中的annotation-config标签开启注解配置
<!-- 开启注解支持 -->
<context:annotation-config/>
<!-- 指定扫描的包路径(如果指定了这个就不用指定上面的) -->
<context:component-scan base-package="com.john.spring" />
用注解的方式开启注解
@Configuration`注解标注的类就相当于一个xml配置文件,我们可以给其添加一个`@ComponentScan`注解来开启注解扫描支持,同时指定扫描包根路径
我们经常使用到的注解:
@Required:用于标注在setter方法之上,表示此属性必须要注入。如果容器初始化该bean时没有合适的值注入
到该属性则直接抛出异常。
@Autowired:根据依赖的类型自动注入。该注解可以用于标注在 属性、setter方法、构造方法、或带参数的普
通方法之上。Spring会将符合的参数自动注入到属性、或方法参数中。
@Resource:根据依赖bean的名称自动注入。注解的name属性不是必须的,如果不指定,那默认的名称将取
决于变量名称、setter方法的名称,还有个好处,如果按名称无法找到一个匹配bean的时候,它会自动按照类
型查找注入。
@Bean:注解允许我们通过注解的方式定义在Java代码中定义bean的配置元数据,相当于xml配置文件中的
<bean /> 这里有一个name属性,如果不指定name属性,默认取值为方法名
@Scope:注解可以限定通过注解配置的bean的作用域。默认的是singeton ,还有一个属性值是Prototype
xml和注解两种方式混合使用
注解的方式确实很简单方便,但是都各有优点缺点,看使用场合,两种混用也挺好的,虽然我还是更喜欢xml的
方式,这个看自己的爱好,
在一个配置中导入另一个配置
1.xml导入xml配置
在<beans></beans>标签中
<import resource="classpath:aaa.xml" />
2.注解方式方式导入其他注解配置
@Import(aaa.class) 导入一个被注解配置过的aaa类
3.注解方式导入xml配置
@ImportResource("aaa.xml")导入一个aaa.xml
bean的作用域scope
scope的属性有6个:singleton,prototype,request,session,applocation,websocket
在这里说一下singleton(单例的)无论使用次数都是一个对象,prototype(非单例),每次使用都会调用一次新
的对象
bean的生命周期
生命周期就是初始化和销毁,在xml文件中的<bean method-init=" ",method-destroy="></bean>来指定
生命周期, 但是在自己做测试的时候会遇到destroy销毁方法不会打印出来,这个时候就用来调用一个钩
子registerShutdownHook()这个方法.让服务器关闭等候
bean的name和id属性
id属性的值只能指定一个,使用name属性命名bean可以指定多个名称,多个值之间可以用逗号或空格
分开,无论使用哪个,都要保证唯一不重复,也只是一个限定用的也可以都同时使用.
实例化bean的方式
1.通过构造方法实例化
一般用无参的构造方法实例化,构造方法实例化也是最常用实例化bean的方式
2.通过静态工厂实例化
<bean id="clientService" class="examples.ClientService" factory-method="createInstance">
<!-- 如果工厂方法需要参数,通过此标签传参 -->
<constructor-arg name="cname" value="TestService" />
</bean>
3.非静态工厂实例化
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
</bean>
优雅的关闭服务器
也就是上面那个钩子
ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
ctx.registerShutdownHook();
DI中的自动装配autowire
通过byName,byType,constructor三种方式
本文详细介绍Spring框架的下载、配置方法及bean管理,包括XML和注解方式,阐述了ApplicationContext实现类及其初始化路径,深入解析bean作用域、生命周期、自动装配及优雅关闭服务器的方法。
174万+

被折叠的 条评论
为什么被折叠?



