Spring: 核心
Spring IoC 依赖对象(控制反转 依赖注入)
Spring AOP
Spring 事务
EJB(企业级java baen)
重点在于分布式和事务
JTA: 分布式事务
JMS:解耦
Spring IoC 依赖对象(控制反转 依赖注入)
创建对象 管理对象间的依赖关系 , bean的生命周期
inversion of Control 中文 控制反转
创建控制对象的控制权,以前是我们自己创建对象,反转的意思就是将创建对象的控制权交出去,给Spring 容器创建 (控制反转)
DI(依赖注入)
Dependency inection
获取对象的过程被反转了
总结:
IoC 创建对象的控制权交给了Spring容器(将创建对象交给别人创建)
DI 解决对象之间的依赖关系
注册方式:
@Configuration ssm 项目 xml + 注解方式
springboot java config+ 注解方式
Spring-context.xml 配置文件注册:
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
<!--Spring 核心配置文件-->
<!-- spring 创建对象-->
<!-- 如Map id为key class为value-->
<!-- scope 默认所有对象都是单例(singleton) prototype 创建普通对象-->
<!-- 子元素 property-->
<!-- 三个属性 name 属性的名称 value 基本类型 ref指向容器的另外一个对象-->
<bean id="userService" class="com.spring.service.impl.UserServiceimpl" />
<bean id="user" class="com.spring.entity.User"
scope="singleton"
init-method="init"
destroy-method="destroy"
lazy-init="true">
<property name="name" value="123"/>
<!-- <property name="address" ref="指向另外一个bean对象"/>-->
<!-- List 赋值-->
<property name="list" >
<list>
<value>123</value>
<value>333</value>
</list>
</property>
<!-- List 赋值 引入p utis包-->
<p:list id="list">
<value>123</value>
</p:list>
<!-- Map 赋值-->
<property name="map">
<map>
<entry key="1" value="hehe"/>
</map>
</property>
</bean>
</beans>
注解注册:
/**
*
* 先开启注解
*<context:component-scan base-package="自动扫描指定包及其子包下的所有Bean类"/>
* @Component 相当于使用bean (只放在类上)
* 不设置默认为类名首字母小写
* 作用 往容器中注册对象 再累上使用
* -给容器中的bean指定名字 如果不能指定则类名默认首字小写
*
* @Service 声明在Service层
* @Repository 声明在dao层
* @Controller 声明在 Controller层
*/
java Config
- 在类方法上使用@Configuration注解
- 在类定义方法
- 必须是public 定义方法
常用Spring的声明的注解,
注解 | 作用域 | 说明 |
---|---|---|
@Component | 注解在类上,可以作用在任何层次。 | 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。是一个泛化的概念,仅仅表示一个组件 (Bean) ,将一个实体类,放入Spring中。 |
@ Service | 注解在类上 | 用于标注业务层组件 |
@ Controller | 注解在类上 | 用于标注控制层组件 |
@ Repository | 注解在类上 | 用于标注数据访问组件,即DAO组件。 |
具体:
Spring容器扫描指定包路径下的所有类,每当找到1个@Component
注解,就会注册Bean,同时设置Bean ID。
**注: **默认情况下Bean ID就是类名,但首字母小写。如果类名以连续几个大写字母开头,首字母不小写。(即HELLOService -> HELLOService)
设置ID :@Component(value = “value”) ,其中value 为设置的ID
<context:component-scan base-package="com.wener.example(包下所有Bean类)"/>
自动扫描指定包及其子包下的所有Bean类
- 注解类Component上:(可以作用在任何层次)Spring IoC 会把这个类扫描成一个 bean实例
@Component(value = “value”) 其中value表示这个类在Spring中的 id (不写默认小写开头其名)
-
Controller 用于户业务层
-
Service 服务层
-
Repository dao层
-
@Service在类上注解后 后通过 @Qualifier(“类名调用”)
该注解可以使用字段、方法、参数、注解上
当Spring容器中存在多个具有相同类型的 bean 时,
并且想要用一个属性只为它们其中的一个进行装配,在这种情况下
总结:
-
被注解的java类当做Bean实例,Bean实例的名称默认是Bean类的首字母小写,其他部分不变。
-
Controller 、@Repository、@Controller、 @Service可以自定义Bean名称,理论上只要符合java的命名规范的名字都可以,但是必须是唯一的,
-
尽量使用对应组件注解的类替换@Component注解,在spring未来的版本中,@Controller,@Service,@Repository会携带更多语义。并且便于开发和维护!
-
指定了某些类可作为Spring Bean类使用后,在Spring配置文件加入如下配置
<context:component-scan base-package="自动扫描指定包及其子包下的所有Bean类"/>