Spring

Spring的配置文件加载方式

1、 ClassPathXmlApplicationContext 提供相对路径
2、 FileSystemXmlApplicationContext 提供绝对路径
。。。。。
Spring在加载 配置 可以通过多种路径加载 -----------> 设计模式 中间的策略模式
Spring加载多配置文件
ApplicationContext ctx =
new ClassPathXmlApplicationContext("spring-context.xml","spring-context-service.xml");

思考问题:
Bean 是如何被实例化过程的?
xml ----> bean实例化(注意) ----> 存入bean池
重点 Spring Ioc 控制力反转 ----> bean 控制权 -----》 bean的创建
方式:
1、构造器的方式实例化bean对象 (重点掌握)
<bean id = "" class = ""> ---->反射 ---> newInstance() ---- > 空参数构造
2、静态工厂方法方式实例化bean (一般意思)
<!-- 静态工厂 配置 -->
<bean id="goodsService" class="com.shsxt.factory.StaticFactory" factory-method="createGoodsService" ></bean>
备注: class ---> 静态工厂 class factory-method (一定要提供静态方法)
3、实例化工厂(一般意思)
步骤: 1、 实例化 工厂bean
2、 实例化bean 加入 工厂bean (factory-bean factory-method)

Spring的DI
依赖注入 (方式四种) 【属性注入】
在Spring容器中获取 对象 注入到 bean 中
{
bean {
属性赋值 ----> 使用框架赋值 ----> 这样的过程称为依赖注入 ( Dependency Injection)
}
}

依赖注入实现方式
1、Set注入 (重点掌握)
第一步: 提供属性的Setter方法
第二步: 配置bean中的 property 属性
<!-- set注入 -->
<bean id="userService" class = "com.shsxt.service.UserService">
<property name="dao" ref="userDao"/>
</bean>
ref:依赖Class
2、 构造器注入
第一步:提供带参数构造
第二 步: 使用构造器注入
<!-- 构造器方式 -->
<bean id= "lOLTeam" class="com.shsxt.service.LOLTeam">
<constructor-arg index="0" ref="rNGTeam"/>
<constructor-arg index="1" value="rng"/>
</bean>
构造器方式:
<constructor-arg name="" ref/value = "" ></constructor-arg>
<constructor-arg index="" ref/value = "" ></constructor-arg>
<constructor-arg type="" value="" />
3、 静态工厂注入
第一步: 初始化 静态静态工厂
<!-- 静态工厂注入 -->
<bean id="weTeamName" class="com.shsxt.factory.StaticFactory" factory-method="CreateWeTeamName"/>
<bean id="weTeamCount" class="com.shsxt.factory.StaticFactory" factory-method="createWETeamCount"/>
第二步:属性注入
<bean id="wETeam" class="com.shsxt.service.WETeam">
<property name="name" ref="weTeamName"></property>
<property name="count" ref="weTeamCount"></property>
</bean>
4、实例化工厂
第一步: 创建工厂 实例化
<bean id="instanceFactory" class="com.shsxt.factory.InstanceFactory"/>
第二步: 实例化 属性bean
<!-- 创建bean-->
<bean id="lGDTeamName" factory-bean="instanceFactory" factory-method="CreateLGDTeamName"></bean>
<bean id="lGDTeamCount" factory-bean="instanceFactory" factory-method="createLGDTeamCount"></bean>
第三步:属性注入
<bean id="lGDTeam" class="com.shsxt.service.LGDTeam">
<property name="teamName" ref="lGDTeamName"></property>
<property name="count" ref="lGDTeamCount"></property>
</bean>
Spring IOC与 DI (七种)

其中 IOC : 三种方式
1、默认构造器 (重点意思)
2、静态工厂
3、实例化工厂



DI : 四种方式
1、setter (重点意思)
2、构造器(带参) {三种}
3、静态工厂
4、实例化工厂
---------------------------------------------------------

Spring IOC 注解式

Spring自动扫描项目 为代码 添加 Ioc/DI 可以不用使用手动配置 xml
操zuo :
1、 加入 Spring 上下文 context
xmlns:context="http://www.springframework.org/schema/context"
加入约束规范
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
2、实现自动注入
<context:annotation-config/>
@Autowired 属性字段或set方法上
@Resource 属性字段上或set方法上
Autowired与Resource ?

@Autowired

{Autowired: bean clas类型 是Spring的注解 }

@Resource
{ Resource 1、name属性 2、类型查找 是jdk的注解 }
注意:推荐使用 Resource 更好与Spring框架的框架解耦
Spring自动扫描项目 为代码 添加 Ioc/DI 可以不用使用手动配置 xml
操zuo :
1、 加入 Spring 上下文 context
xmlns:context="http://www.springframework.org/schema/context"
加入约束规范
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
2、实现自动注入
<context:annotation-config/>
@Autowired 属性字段或set方法上
@Resource 属性字段上或set方法上
Autowired与Resource ?

@Autowired

{Autowired: bean clas类型 是Spring的注解 }

@Resource
{ Resource 1、name属性 2、类型查找 是jdk的注解 }
注意:推荐使用 Resource 更好与Spring框架的框架解耦


Spring Ioc容器自动扫描管理bean



第一步: 配置基础扫描包
<context:component-scan base-package="com.shsxt"/>
作用 :IOC : 自动初始化bean DI: 自动注入
第二步:加入注解

开发中建议(开发中的一种约定)
Dao 层:@Repository
Service层:@Service
视图控制层:@Controller
如果对于开发的类实在不明确到底属于哪个层,可以使用@Component注解定义。

Spring Bean
Bean的作用域问题
默认情况下,我们从spring容器中拿到的对象均是单例的
1、 singleton 作用域
<bean id = "" class = "" scope = "singleton" />
2、 懒加载模式
默认是 lazy-init = "false"
3、 非单利模式 prototype
<bean id = "" class = "" scope = "prototype" />
Bean的生命周期 (一般意思)
在Spring中,Bean的生命周期包括Bean的定义、初始化、使用和销毁4个阶段
1、 Bean的定义
配置 或者注解
2、Bean初始化 {场景} 一定要注意
常规
1、 Spring容器启动时候,会出现Bean初始化
2、 非单利bean 在调用时候,出现bean的初始化
3、 懒加载bean 第一次 调用的时候初始化
web
1、当scope = request 每次请求时候初始化 bean
2、session/globalSession 每一次会话出现bean的初始化
3、 bean使用
具体情况 具体分析 xxxx
4、bean销毁 {场景} 一定要注意
1、 Spring容器停止时候,会出现Bean销毁
2、 非单利bean 销毁 取决于 GC线程
3、当scope = request 每次请求结束后 后GC回收
4、 session/globalSession 类似于session的回收
面试: 聊聊 Bean的生命周期 ?
1、Spring是什么?
Spring是 java生态圈 中一个 轻量级的开源框架
Spring 提供的了 项目中 对bean的一站式管理 ,管理bean的生命周期各个阶段 xxxxx
spring 提供 AOP技术 面向切面编程 xxxxxxxx
Spring 应用于 java project 或者 java Web project ,可以实现强大的框架的集成 (各个框架的集成)
Spring 让开发人员 更多的关注 应用的逻辑
。。。。。
2、Spring中的核心技术IOC?
IOC: 控制反转 ---> 将bean的控制权移交给Spring容器 ,由Spring容器实现对 bean的管理
IOC的实现过程:(BeanFactory)
1、xxxxx
2、xxxxx
3、xxxxx

3、IOC与DI之间的关系 ?
DI:依赖注入(属性注入)
IOC 实现的过程 需要 对bean属性 实现 注入 此时就需要 用到 DI { 两个idea }
IOC与DI: 相辅相成、 相互合作、协同
=============================================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值