spring 学习 (很久之前的笔记)
Spring
1. Spring 简介
2. IOC理论
2.1
2.2 IOC创建对象的方式
- 无参(默认)
生成pojo对象
public class Person {
private String name;
private Integer age;
private String sex;
public Person() {
System.out.println("无参构造函数生成对象");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
配置beans.xml
<bean id="person" class="Person"/>
测试
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Person person = context.getBean("person", Person.class);
System.out.println(person);
}
}
-
有参
- 下标赋值
<bean id = "person" class="Person"> <constructor-arg index="0" value="erik"></constructor-arg> </bean>
- 类型
<bean id="person" class="Person"> <constructor-arg type="java.lang.String" value="erik1"></constructor-arg> </bean>
- 参数名
<bean id="person" class="Person"> <constructor-arg name="name" value="erik2"></constructor-arg> </bean>
总结:
3. spring配置
3.1 别名
顾名思义,给bean起一个别名
<bean id="person" class="Person"/>
<alias name="person" alias="person2"></alias>
3.2 beans
id:bean的唯一标识符
class:pojo类
name:别名
<bean id="person" class="Person" name="person3"/>
3.3 import
4. 依赖注入
4.1 构造器注入
有参构造函数注入属性,有三种方式,下标、类型、名称
<constructor-arg index="0" value="erik"></constructorarg>
<constructor-arg type="java.lang.String" value="erik1"></constructor-arg>
<constructor-arg name="name" value="erik2"></constructor-arg>
4.2 set方式注入
<bean id="person" class="Person" name="person3">
<property name="name" value="erik3"></property>
<property name="hobbies">
<array>
<value>happy</value>
<value>happy</value>
</array>
</property>
<property name="sports">
<list>
<value>ball</value>
<value>sports</value>
</list>
</property>
</bean>
4.3 扩展方式
- p标签(属性;set方式)
<bean id="person" class="Person" p:age="17"></bean>
- c标签(构造函数)
<bean id="person" class="Person" c:age="20"></bean>
注意:使用p标签和c标签之前要导入约束
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
4.4 bean的作用域
在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义以及bean相互间的依赖关系将通过配置元数据来描述。
5. bean的自动装配
5.1 在xml中配置
5.2 在java中配置
5.3 隐式自动装配
- byname
byname会自动在容器的上下文中查找,和自己对象的set方法后面值对应的beanid
- bytype
byname会自动在容器的上下文中查找,和自己对象的set方法后面类型对应的beanid
5.4 自动装配缺点
- 属性要么都是用自动装配的形式,要么不用,不能部分使用或者部分不使用
- 只能by name和by type择其一
5.4 使用注解实现自动装配
注意:使用注解之前需要1. 导入约束 2. 配置注解的支持
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
<context:annotation-config/>
@Autowired
直接在属性上使用,也可以在set方式上使用
6. spring使用注解开发
6.1 bean
6.2 属性如何注入
6.3 衍生的注解
6.4 自动装配
6.5 作用域
6.6 小结:
xml与注解:
- xml更加万能,适用于任何场合,维护简单方便。
- 注解不是自己的类使用不了,维护相对复杂。
xml与注解的最佳实践:
- xml用来管理bean
- 注解只负责完成对属性的注入
- 注意:要让注解生效,必须要开启对注解的支持
//指定要扫描的包,这个包下的注解就会生效
<context:component-scan base-package="cn.erik"/>
<context:annotation-config/>
7. 使用java的方式配置spring
不是用spring的xml配置,而是使用java的方式JavaConfig
8. AOP
8.1 简介
8.2 spring aop
8.3 使用
-
spring aop API
-
自定义类
-
注解