spring的基础
这个图对于spring来说太重要了
Beans :Spring IOC的基础实现,包含访问配置文件、创建和管理bean等。
Context :在基础IOC功能上提供扩展服务。其扩展支持可用于MVC方面。
Core :Spring的核心工具包
SpEL :Spring表达式语言
AOP :Spring的面向切面编程,提供AOP(面向切面编程)的实现
Aspects :Spring提供的对AspectJ框架的整合
Instrumentation :Spring对字节码操作和类加载器的支持,用于特定的应用服务器
Messaging : 用于支持基于消息的应用而提供的消息通信抽象
JDBC :对JDBC的简单封装
ORM :整合第三方的orm实现,如hibernate
OXM :Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换
JMS : 提供JMS的消息的收发的特性,与 Messaging模块集成一起使用
Transactions :为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。
Web :包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
WebMVC :Spring提供的一个MVC模块,包含SpringMVC框架相关的所有类
Test :对JUNIT等测试框架的封装,为测试Spring应用提供各种支持
Spring的优势
低侵入, 代码不需要额外实现接口或者继承父类
低耦合,Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
模块化,Spring高度模块化,而且并不强制应用完全依赖于Spring,开发者可以从各个层面上扩展spring,即自由选用Spring框架的部分或全部
通过AOP提供灵活强大的系统级功能支持,Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
提供常用企业级开发场景下的处理规范或者模块实现。比如Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问,通过Spring的MVC模块提供对WebMVC的支持
pring创建对象(控制反转)的三种方式
1.使用构造方法创建
2.使用工厂创建{
1.1实例工厂
1.2静态工厂
}
使用实例工厂创建
spring依赖注入的三种方式
- 构造器注入:依赖于类的构造方法实现,构造方法可有参也可无参;
- setter注入:依赖于类的setter方法实现,灵活且可读性高,这是spring中最主流的注入方式;
- 接口注入:(不常用)
依赖注入的三种类型
基本数据类型、String
容器中注册过的bean
复杂类型(集合类型)
- 不同类型的注入方式
• (1)基本数据类型 value
• 引用类型
• (2)String value
• (3)集合类型 list set map
• value
• ref
• (4)其他 ref
<bean id="userController" class="com.woniuxy52.spring.controller.UserController">
<property name="userService" ref="userServiceVip"/>
<property name="number" value="18.91"/>
<property name="name" value="hohoho"/>
<property name="students">
<list>
<value>曾氾银</value>
<value>曾崇德</value>
<value>杜渝新</value>
</list>
</property>
<property name="userServices">
<list>
<ref bean="uService"/>
<ref bean="userServiceVip"/>
</list>
</property>
<property name="userServiceSet">
<set>
<ref bean="uService"/>
<ref bean="userServiceVip"/>
</set>
</property>
<property name="map">
<map>
<entry key="u1" value-ref="uService" />
<entry key="u2" value-ref="userServiceVip" />
<entry key="u3" value-ref="userServiceVip" />
</map>
</property>
</bean>
- 注入的方式
• setter注入,spring容器调用属性的setter方法来注入;需要有一个默认的无参构造,先实例化再注入
• 构造器注入,spring容器实例化时通过构造器
区别: 灵活性;时机不同,构造器是在实例化的同时需要注入属性,setter可以延迟;
语法
构造器注入,使用constructor-arg
<!-- 构造器 -->
<bean id="rocket" class="com.woniuxy52.spring.Rocket">
<constructor-arg name="model" value="神舟12号"></constructor-arg>
<constructor-arg name="length" value="50"></constructor-arg>
<!--复杂类型用ref引用-->
<constructor-arg name="propeller" ref="p"/>
</bean>
<bean id="rocket2" class="com.woniuxy52.spring.Rocket">
<!--可以用index指定位置-->
<constructor-arg index="0" value="神舟12号"></constructor-arg>
<constructor-arg index="1" value="50"></constructor-arg>
<constructor-arg index="2" ref="p"/>
</bean>
<bean id="rocket3" class="com.woniuxy52.spring.Rocket">
<!--可以用index指定位置-->
<constructor-arg index="0" value="神舟12号"></constructor-arg>
<constructor-arg index="1" value="50"></constructor-arg>
</bean>
<bean id="p" class="com.woniuxy52.spring.Propeller">
<constructor-arg name="weight" value="20"/>
</bean>
- 加入第三方的对象
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://lcoalhost:3306/dev/xx"/>
<property name="username" value="root"/>
<property name="password" value="root123"/>
</bean>
Bean作用域
[作用域
描述
singleton
(默认)一个容器中的Bean只有一个实例
prototype
每个Bean的每次获取产生一个实例
request
对应一次Http请求,只在web容器中可用
session
对应一次会话,只在web容器中可用
application
对应一个ServletContext只在web容器中可用
websocket
对应一个WebSocket.生命周期,只在web容器中可用]
链接如下:
(https://www.yuque.com/books/share/594b07f0-be9d-448c-b6ec-93139d44d37d/wkq5rq?inner=jUh9k)
注意:singleton 指的是每一个Bean的定义只有一个实例,而不是一个类只有一个实例