Spring知识点

spring:一个开源的用来简化应用开发的框架
1.简化开发
对常用的api做了封装和简化(eg,对jdbc做了封装,使用spring jdbc来访问数据库,就不在需要考虑获取连接和关闭连接了)。
2. 管理对象
spring提供了一个容器,帮我们创建对象以及建立对象之间的依赖关系。(通过依赖注入)这样做的好处是,降低对象之间的耦合度,方便代码的维护。
3.集成其他框架
任务调度—Quartz框架(只做任务调度) 不发明重复的轮子,拿来主义->spring思想
spring可以将其他的一些框架集成进来,(例如,集成任务调度的框架Quartz,即“”不发明重复的轮子,拿来主义“”)
4.一站式的框架

spring:1.spring容器(IOC) 2.spring mvc 3.spring jdbc 4.spring mybaits

spring容器
spring框架中的一个核心模块,用于管理对象。

启动spring容器
1.导包(spring-webmvc)
2.添加配置文件
3.启动spring容器( bean对象都是单例)
ApplicationContext ct = new ClassPathXmlApplicationContext(“beans.xml”);
//1.创建spring容器 2读取beans.xml文件 3.创建bean对象 4.把bean对象加入容器
Hellow hello = (IHellow)ct.getBean(“hellowBiz”);
//从Spring容器中查找指定名字的bean对象
hello.sayHello(“tom”);
//调用方法

(1)如何创建对象?
方式一: 使用无参构造器(重点)
1.给类添加无参构造器(或者缺省构造器/默认构造器)
2.配置元素(id:bean的名称,要求唯一 class:类的全限定名称,即包名+类名)
3.调用容器的getBean方法来获取对象
方式二:使用静态工厂方法创建对象
< bean id=“cal1” class=“java.util.Calendar” factory-method=“getInstance”/>
通过调用类的静态方法来创建对象
factory-method属性:指定一个静态方法
spring容器会调用这个静态方法来创建对象
方式三:使用实例工厂来创建对象(了解)
通过调用对象的实例方法来创建对象。
bean id=“time1” factory-bean=“cal1” factory-method=“getTime” />
factory-bean属性:指定一个一个bean的id。
factory-method属性:指定一个方法,
spring容器会调用这个bean的对应的方法来创建对象

(2)作用域(一般不配置)
默认情况下,容器对某个bean只会创建一个实例。
scope属性:用来配置作用域,缺省值是singleton(单例),如果 scope=“prototype”(原型),即一个bean可以创建多个实例

(3)生命周期
初始化:分配资源 销毁 : 释放资源
初始化方法:< bean id=“mb1” class =“scope.MessageBean”
init-method=“init” destroy-method=“destroy”/>
--------init-method属性:用来指定初始化方法
--------destroy-method属性:用来执行销毁方法
注意:spring容器在创建对象后,会立即调用初始化方法
spring容器在关闭之前,会先销毁对象,在销毁对象之前,会先调用对象的销毁方法
只有作用域为单例的时候,销毁方法才起作用(即spring为原型模式时 (scope=“prototype“)销毁方法不执行)

(4)延迟加载(了解)
spring容器启动之后,会将所有作用域为单例的bean创建好
lazy-init=“true” ------指定是否延迟加载,true代表延迟,对于作用域为单例的bean不会创建实例,只有在getbean时,才会调用, default(缺省值)会将所有默认为单例的加载好

(5) 控制反转:IOC(Inversion Of Controll )
1.定义:对象之间的依赖关系,由容器来建立。

(6)依赖注入:DI(Dependency Injection)
1.定义:容器通过调用对象提供的set方法或者构造器来建立依赖关系
注意:IOC是目标,DI是手段。
set注入方式:1.提供相应的set方法 2.使用元素。



-----property(属性) 元素:表示使用set方法来注入依赖关系。
name属性指定属性名。ref指定属性值(被注入的bean的id)

        构造器方式注入:1.添加相应的构造器   2.配置constructor-arg元素
   constructor-arg元素:用来配置构造器方式的注入,index属性指定参数的下标(从0开始)
 8020原则:80%set注入,20%构造器注入

(7)自动装配(自动注入)(了解) -------autowire
指spring容器依据某种规则,自动建立对象之间的依赖关系。
注意:a. 默认情况下,容器不会自动装配
b.可以通过指定autowire属性来告诉容器进行自动装配(容器仍然需要通过调用set方法或者构造器来完成依赖关系的建立)
autowire=“byName” :容器依据属性名查找对应的bean,然后调用对应的set方法来完成注入
注意:a.如果找不到对应的bean,注入空值null, ————id=“wt1”
b.不可能找到多个符合条件的bean
autowire=“byType” :容器依据属性类型查找对应的bean,然后调用对应的set方法来完成注入
注意:a.如果找不到对应的bean,注入空值null,
b.有可能找到多个符合条件的bean,会报错
autowire=“constructor” :类似于byType,只是调用的是对应的构造器来完成注入

(8)注入基本类型的值
使用value属性即可
(9)注入集合类型的值
List(可重复,有序)
Set
Map
Properties Tiger

set,map,properties-----无序
(10)引用的方式注入集合类型的值
<util:list id=“city”>上海</util:set>
<util:set id=“intersetBean”>阅读</util:set>
<util:map id=“scoreBean”></util:map>
<util:properties id=“dbBean”>张三</util:properties>

<bean id="vb2" class="value.ValueBean">
	<property name="city" ref="cityBean"></property>
	<property name="interset" ref="intersetBean"></property>
	<property name="score" ref="scoreBean"></property>
	<property name="db" ref="dbBean"></property>
</bean>

(11)读取properties文件的内容
<util:properties id=“config” location=“classpath:config.properties”/>
classpath:按照类路径来搜索。
spring容器会依据路径找到对应的配置文件,然后读取该文件的内容到Properties对象

(12)使用spring表达式
可以使用spring表达式读取其它bean的属性,类似于EL表达式 ---------#{}
------id.get属性方法
------id.列表下标
------.id.key(Map的key)
-----配置文件的key

使用注解简化配置
(1)组件扫描
spring容器会扫描该包及其子包下面的所有的类,如果该类前面有特定的注解(比如@Component), 则spring容器会将其纳入容器进行管理(相当于在配置文件中,配置了一个bean元素)。
(2)步骤:
1.在类前,添加特定的注解@Component(“bean的id”)-----缺省值:首字母小写之后的 类名 @Component
@Named -----通用注解
@Repository–持久层组件注解 @Service–业务层组件注解 @Controller–控制层组件注解
注意:@Component ,@Repository @Service,@Controller 作用等价,语义上有差异
@Named -----sun公司制作,需要导包,完全等价于@Component
2.在.xml文件中,添加组件扫描的配置
<context:component-scan base-package=“annotation”/>
(3)其他相关注解
@Scope(“singleton/prototype”) -----指定作用域
@Lazy -----延迟加载注解
@PostConstruct ------初始化方法注解 @PreDestroy ----销毁方法注解

(4)依赖注入的相关注解
@Autowired @Qualifier --支持set和构造器方式的注入,
当采用set方式注入时,可以将@Autowired添加到set方法之前,如果不使用@Qualifier(“xxx”),则容器使用 byType方式注入,有可能报错,使用@Qualifier(“xxx”),明确指出要注入的bean的id
注:也可以将注解直接加入到属性前,使用java反射机制
当采用构造器注入,将该注解添加到对应的构造器前面即可
@Resource(重点) -----只支持set方式的注入
可以将该注解添加到属性前,使用name属性指定要注入的bean的id(如果不指定,容器使用 byType方式注入,有可能报错)
注:也可以将注解直接加入到属性前
(5)@value
可以使用该注解来注入基本类型的值
也可以使用该注解来使用spring表达式
该注解可以添加到属性前或者是对应的set方法前

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值