三层架构
- A 表现层 web层 MVC是表现层的一个设计模型
- B 业务层 service层
- C 持久层 dao层
Spring 的 BeanFactory 容器
Bean 的作用域
<bean>标签中id和name属性的配置
从之前编写的Spring配置文件中,我们可以发现<bean>标签中有一个id属性,其实它还有一个和id属性类似的name属性,根据它俩的值均能得到配置对象。
id属性:在Spring配置文件中会有多个bean标签,但它们的id属性值是不能相同的。Bean起名字时,在约束中采用的是ID约束(唯一约束),而且名字必须以字母开始,可以使用字母、数字、连字符、下划线、句号、冒号等,但id属性值绝对不能有特殊符号;
name属性:没有使用约束中的唯一约束,理论上name属性值是可以出现重复的,但是这在实际开发中是不可能出现的,而且它里面可以出现特殊字符。
Singleton 是单例类型,就是在创建起容器时就同时自动创建了一个 bean 的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,Singleton 作用域是 Spring 中的缺省作用域。
Prototype 是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。
生命周期回调方法 (创建-初始化-使用-销毁)
init-method 属性指定一个方法,在实例化 bean 时,立即调用该方法。
destroy-method 指定一个方法,只有从容器中移除 bean 之后,才能调用该方法。
Spring Bean 定义继承
使用 parent,可以定义一个父 bean 的定义作为模板和其他子 bean 就可以从父 bean 中继承所需的配置。
在定义一个 Bean 定义模板时,你不应该指定类的属性,而应该指定带 true 值的抽象属性
依赖注入
基于构造函数注入和基于设值函数注入中的 Beans.xml 文件的区别。唯一的区别就是在基于构造函数注入中,我们使用的是〈bean〉标签中的〈constructor-arg〉元素,而在基于设值函数的注入中,我们使用的是〈bean〉标签中的〈property〉元素。
ref 传递引用 value 传递值
使用 p-namespace 实现 XML 配置
集合注入
引入注入
自动装配
autowire: byName/byType
byName:
在 XML 配置文件中 beans 的 auto-wire 属性设置为 byName,将相同名称beans匹配连接,如果找到匹配项将注入,否则抛出异常
byType:
在 XML
配置文件中 beans
的 autowire
属性设置为 byType
。然后,如果它的 type
恰好与配置文件中 beans
名称中的一个相匹配,它将尝试匹配和连接它的属性。如果找到匹配项,它将注入这些 beans
,否则,它将抛出异常。
constructor:它尝试把它的构造函数的参数与配置文件中 beans 名称中的一个进行匹配和连线。如果找到匹配项,它会注入这些 bean,否则,它会抛出异常。
注解:
@Component
@Service 服务层
@Repository 持久层
@controller web层 控制层
@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常。
值注入 @value 加到set方法 或者 局部变量
对象的注入 @Autowired @Qualifier 相当于 @Resourse
Spring @Qualifier 注释 可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。
@Scope (bean作用域) 默认为单例模式
prototype 原型模式
@PostConstruct (bean初始化的回调函数)
@PreDestroy (bean销毁时的回调函数)
@import 注解允许从另一个配置类中加载
@Bean 定义
p名称空间的属性注入方式
- 普通属性:p:属性名称=“值”
- 对象类型的属性:p:属性名称-ref=“值”
SpEL表达式语言的属性注入(Spring3.0版本后提供的方式)
语法格式是#{SpEL}
-
<dependency>
-
<groupId>org.aspectj</groupId>
-
<artifactId>aspectjweaver</artifactId>
-
<version>1.6.8</version>
Spring分模块开发的第一种配置方式就是指在加载配置文件的时候,一次加载多个配置文件。
Spring分模块开发的第二种配置方式就是指在一个配置文件中引入多个配置文件。
aop
引入aspectj
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
Spring中切入点表达式的写法
Spring通过execution函数,可以定义切入点切入的方法。其语法为:[访问修饰符] 方法的返回值 包名.类名.方法名(参数)
。
aop 注解
@Aspect注解用于定义切面类
@Before 前置通知
@AfterReturning 后置通知 returning 代表返回的结果
@Around 代表环绕通知 throwing
@After //最终通知
@Pointcut注解来定义切入点