Spring知识点
- 1. Spring简介(此章略过)
- 1.1 Spring概述
- 1.2 Spring家族
- 1.3 Spring Framework
- 2. IOC
- 2.1 IOC容器
- 2.2 基于XML管理bean
- 2.2.1 入门案例(ioc容器的整体思路)
- 2.2.2 获取bean的三种方式
- 2.2.3 依赖注入
- 2.2.3.1 setter注入
- 2.2.3.2 构造器注入
- 2.2.4 特殊值处理
- 2.2.5 为类类型属性赋值
- 2.2.6 为数组类型属性赋值
- 2.2.7 为集合类型属性赋值
- 2.2.8 p命名空间
- 2.2.9 引入外部属性文件
- 2.2.10 bean的作用域
- 2.2.11 bean的生命周期
- 2.2.12 FactoryBean
- 2.2.13 基于xml的自动装配
- 2.3 基于注解管理bean
- 2.3.1 标记与扫描
- 2.3.2 基于注解的自动装配
- 3. AOP
- 3.1 场景模拟
- 3.2 代理模式
- 3.3 AOP概念及相关术语
- 3.4 基于注解的AOP
- 3.5 基于XML的AOP(了解)
- 4. 声明式事务
- 4.1 JdbcTemplate
- 4.2 声明式事务概念
- 4.3 基于注解的声明式事务
- 4.4 基于XML的声明式事务
1. Spring简介(此章略过)
1.1 Spring概述
1.2 Spring家族
1.3 Spring Framework
2. IOC
2.1 IOC容器
IOC:Inversion of Control,翻译过来是反转控制。
DI:Dependency Injection,翻译过来是依赖注入。
2.2 基于XML管理bean
2.2.1 入门案例(ioc容器的整体思路)
类和方法:
文件位置:src/main/java/com/atguigu/spring/pojo/HelloWorld.java
package com.atguigu.spring.pojo;
public class HelloWorld {
public void sayHello(){
System.out.println("hello,spring");
}
}
Spring配置文件
创建方式:
文件位置:src/main/resources/applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
bean:配置一个bean对象,将对象交给IOC容器来管理;
配置HelloWorld所对应的bean,即将HelloWorld的对象交给Spring的IOC容器管理
属性:
id:设置bean的唯一标识
class:设置bean所对应类型的全类名
-->
<bean id="helloworld" class="com.atguigu.spring.pojo.HelloWorld"></bean>
</beans>
测试类
文件位置:src/test/java/com/atguigu/spring/test/HelloWorldTest.java
package com.atguigu.spring.test;
import com.atguigu.spring.pojo.HelloWorld;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloWorldTest {
@Test
public void test(){
//获取IOC容器
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取IOC容器中的Bean对象
HelloWorld helloworld = (HelloWorld) ioc.getBean("helloworld");
helloworld.sayHello();
}
}
2.2.2 获取bean的三种方式
获取bean的方式:
1、根据id获取
2、根据类型获取(最常用)
3、根据id和类获取
/**
* 获取bean的三种方式:
* 1、根据id获取;
* 2、根据类型获取;(使用最多的方式)
* 注意:根据类型获取bean时,要求IOC容器中有且只有一个类型匹配的bean。
* 若没有任何一个类型匹配的bean,此时抛出异常:NoSuchBeanDefinitionException
* 若有多个类型匹配的bean,此时抛出异常:NoUniqueBeanDefinitionException
* 3、根据id和类型获取;
*/
@Test
public void testIOC(){
//获取IOC容器
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取bean的第一种方法:根据id获取bean
//Student studentOne = (Student) ioc.getBean("studentOne");
//获取bean的第二种方法:根据类型获取bean
Student student = ioc.getBean(Student.class);
//获取bean的第三种方法:根据id和类型来获取bean
//Student studentOne = ioc.getBean("studentOne", Student.class);
System.out.println(studentOne);
}
2.2.3 依赖注入
2.2.3.1 setter注入
学生类
package com.atguigu.spring.pojo;
import java.util.Arrays;
import java.util.Map;
public class Student {
private Integer sid;
private String sname;
private Integer age;
private String gender;
private Double score;
private Clazz clazz;
private String[] hobby;
private Map<String,Teacher> teacherMap;
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", score=" + score +
", clazz=" + clazz +
", hobby=" + Arrays.toString(hobby) +
", teacherMap=" + teacherMap +
'}';
}
public Map<String, Teacher> getTeacherMap() {
return teacherMap;
}
public void setTeacherMap(Map<String, Teacher> teacherMap) {
this.teacherMap = teacherMap;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public Clazz getClazz() {
return clazz;
}
public void setClazz(Clazz clazz) {
this.clazz = clazz;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student() {
}
public Student(Integer sid, String sname,String gender , Integer age) {
this.sid = sid;
this.sname = sname;
this.gender = gender;
this.age = age;
}
public Student(Integer sid, String sname, String gender, Double score) {
this.sid = sid;
this.sname = sname;
this.gender = gender;
this.score = score;
}
}
spring配置文件
<!--依赖注入-setter注入-->
<bean id="studentTwo" class="com.atguigu.spring.pojo.Student">
<!--
property:通过成员变量的set方法来进行赋值;
name:需要设置需要赋值的属性名(属性名:跟get、set方法有关);
value:设置为属性所赋的值;
-->
<property name="sid" value="1001"></property>
<property name="sname" value="张三"></property>
<property name="gender" value="男"></property>
<property name="age" value="23"></property>
</bean>
测试类
public void testDI(){
//获取IOC容器
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
//setter注入
Student studentTwo = ioc.getBean("studentTwo", Student.class);
System.out.println(studentTwo);
}
2.2.3.2 构造器注入
学生类同上(需要设置有参构造)
Spring配置文件
<!--依赖注入-构造器注入-->
<bean id="studentThree" class="com.atguigu.spring.pojo.Student">
<constructor-arg name="sid" value="1002"></constructor-arg>
<constructor-arg name="sname" value="李四"></constructor-arg>
<constructor-arg name="gender" value="女"></constructor-arg>
<constructor-arg name="age" value="24"></constructor-arg>
</bean>
测试类
public void testDI(){
//构造器注入
Student studentThree = ioc.getBean("studentThree", Student.class);
System.out.println(studentThree);
}
2.2.4 特殊值处理
特殊值处理:
1、赋值null
2、使用XML特殊符号赋值
3、使用CDATA节赋值
<!--字面量的特殊值赋值处理-->
<bean id="studentFour" class="com.atguigu.spring.pojo.Student">
<!--1、赋值null-->
<property name="sname"><null/></property>
<!--2、XML特殊符号-->
<property name="sname" value="<王五>"></property>
<!--
3、CDATA节(内容必须放到value标签中)
IDEA中输入“CD”按回车就可以在CDATA节括号内输入内容,CDATA节中的内容全部原样解析。
-->
<property name="sname"><value><![CDATA[<王五>]]></value></property>
</bean>