您的位置:首页 > 编程语言 > Java开发

企业级框架Spring知识点总结--1

2019-06-05 20:03 134 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/mingrilindong/article/details/90920514

企业级框架Spring

Spring简介
Spring是一个开源框架,为JavaEE应用提供多方面的解决方案,用于简化企业级应用 的开发。

1.Spring框架的构成
IOC 控制反转 它是Spring框架的核心。
DAO 数据访问对象模块 它是JDBC的封装和简化。
WebMvc 它是Spring对java web的支持以及MVC设计模式的支持。
AOP 面向切面编程,它是面向对象的扩展。
ORM 对象关系映射(是以面向对象的思想访问数据库):mybatis

2.什么是IOC?
Inverstion Of Control 控制反转
程序中需要某个对象时由原来的new的方式改成了由容器来进行创建和管理以及维护组件关系。
这样做的好处是可以大大降低组件之间的耦合度。

3.Spring容器
任何的java类都可以在Spring容器中创建对象并由容器进行管理以及维护组件关系。
Spring容器实现了IOC和AOP机制。
Spring容器的类型:BeanFactory 或者ApplicationContext类型

4.使用Spring容器完成IOC的步骤
4.1 建立一个项目导入jar包(ioc相关jar包)拷贝Spring配置文件到src下。
4.2 在Spring配置文件中配置创建对象的说明。

<bean id="对象的引用名"  class="包名.类名"></bean>

4.3 创建Spring容器对象,创建对象时需要指定配置文件,使用对应的API获取对象

ApplicationContext  app = new  ClassPathXmlApplicationContext("applicationContext.xml");
app.getBean("类型名",(首字母大写)类型名.class);

5.Spring容器创建对象的三种方式
5.1 构造器方式实例化
默认调用类型对应的无参构造方法

<bean  id="标识符"  class="包名.类名"></bean>

5.2 静态工厂方法实例化
本质上是类型调用对应的静态方法来获取一个对象。类型名.静态方法名()

<bean  id="标识符"  class="包名.工厂名"  factory-method="静态方法名"></bean>

5.3 实例工厂方法实例化
本质上是利用一个已经存在的对象创建出另外一个类型的对象。

<bean  id="标识符"   factory-method="静态方法名"  factory-bean="工厂对象的id"></bean>

6. Spring中对象的作用域
Spring中对象默认的作用域是单例的。如果希望每次请求都获取不同的对象,则可以使用bean标记中的scope属性来指定作用域。scope默认的取值是singleton设置成prototype
则为非单例的。当然这里也有request session 等作用域这到web部分才会涉及。

7. Spring容器中对象的初始化和销毁
**7.1 初始化 **
一个对象被容器创建之后,可以通过beans标记中的default-init-method属性来指定初始化方法,由于这样影响范围比较大(影响配置文件中所有的对象)所以对象对应的类型中如果没有对应的初始化方法,程序也不会报错。也可以通过bean标记中的init-method属性来指定初始化方法,这种方式只会影响到一个对象,所以对象对应的类型中如果没有对应的初始化方法程序就会报错。
7.2 销毁
一个对象即将消亡时,可以通过beans标记中的default-destroy-method属性来指定初始化方法,由于这样影响范围比较大(影响配置文件中所有的对象)所以对象对应的类型中如果没有对应的销毁方法,程序也不会报错。也可以通过bean标记中的destroy-method属性来指定销毁方法,这种方式只会影响到一个对象,所以对象对应的类型中如果没有对应的销毁方法程序就会报错。但是销毁方法只针对单例模式的对象。

8. bean对象的延迟实例化
在Spring容器中对象默认的作用域是单例的,Spring容器对单例对象默认是容器启动时创建,可以通过bean标记的lazy-init="true"让其使用到的时候创建,容器启动时不创建。

9. 什么是DI?
Dependence Injection 依赖注入(依赖注射)
把一个组件的值设置给另一个组件的过程叫做依赖注入。
DI解决的问题就是 组件的装配问题。

10. DI的三种实现方式
10.1 setter注入
参考对应类型的set方法来进行值得设置。
bean 标记中出现如下配置:

<property name="属性名"  value="值"></property>

属性名:这是设置值,所以参考的是set方法,去掉set然后首字母小写。
如果要赋值复杂的值则需要使用ref ,value能赋值的类型有八种基本类型和封装类、String、枚举。
10.2 构造器注入
参考的是构造方法的参数只要构造方法的参数能匹配上则直接调用对应的带参构造。
在bean标记中出现如下配置:

<constructor-arg  name="属性名"  value="值"></constructor-arg>

注意:我们可以使用index替换name,index代表参数的编号 编号从0开始。
10.3 自动化注入
主要解决复杂值的注入问题。只要在bean标记中使用autowire属性来指定自动化注入方式即可。
autowire的取值有:byName,byType,constructor
byName:参考的是属性名
byType:参考的是成员变量的类型
constructor:参考的是构造方法

11. 参数的注入
11.1 简单值的注入
简单值包括八种基本数据类型和对应的封装类,String,枚举。
11.2 复杂值得注入
把set注入或构造注入中的value改成ref 或者自动化注入。
11.3 集合参数的注入
java中有set 、map、List、Properties, 可以在Spring配置文件中配置对应的标记让其创建出对应的对象。
List:

<list>
<value>值</value>
...
</list>

Set:

<set>
<value>值</value>
...
</set>

Map:

<map>
<entry  key=" "  value=" " />
</map>

Properties:

<props>
<prop  key="  ">值</prop>
</props>

12. 集合参数的单独定义
一个集合参数可以被单独定义出来,然后让其他对象的属性进行引用。

13. Spring的EL表达式
和之前的区别是从Spring容器中取值,语法是把之前的$换成#。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: