什么是Spring
Spring是Java企业级应用的开源开发框架 主要用来开发Java应用
Spring的作用
降低耦合 简化开发
有AOP编程的支持
声明式服务的支持
方便程序的测试
方便集成各种优秀框架
降低JavaEE API 的使用难度
Spring Ioc
IoC 控制反转
是Spring的一个核心思想,实现了将类实例化的时机以及细节交给Spring来管理。
DI 依赖注入
当一个对象创建时 它所依赖的属性和对象是由外部传递给他的 而非自己创建的(new)
依赖注入是控制反转的一种具体提现方式
Spring快速入门
1.创建Maven项目
2.pom.xml引入Spring相关依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.29</version>
</dependency>
3.创建BeanConfig
//通过配置类编写实现创建 将bean注入到spring容器中
public class BeanConfig {
@Bean //bean的id为getPerson
public Person getPerson() {
Person person = new Person();
person.setId(1);
person.setName("zs");
return person;
}
}
4.创建测试类
public static void main(String[] args) {
//创建IOC容器
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(BeanConfig.class);
//从容器中根据bean的id值获取bean
Person person = ac.getBean(Person.class);
}
oop设计原则
1.开放关闭原则
2.单一职责: 一个类只做一件事
3.依赖倒置: 上层(调用者)不应该依赖于下层(被调用者),而这应该依赖于抽象
4.接口隔离: 定义小的接口
5.米氏替换: 多态 所以父类出现的地方 都可以被子类替换
6.迪米特法则: "不要和陌生人说话" 代理
Spring Bean
<bean>
的实例化方式
public class Person {
private Integer id;
private String name;
}
public class BeanConfig {
@Bean
public Person getPerson() {
return new Person();
}
}
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(BeanConfig.class);
Person person = ac.getBean(Person.class);
}
<bean>
的属性注入
构造器注入
public class Person {
private Integer id;
private String name;
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
}
public class BeanConfig {
@Bean
//@Scope("singleton")//单例 单例模式
//@Scope("prototype")//多例 原型模式
//@Lazy 懒加载 bean工厂初始化不会创建对象,获取bean时候才会创建bean,策略模式
public Person getPerson() {
return new Person(1, "codingfuture");
}
}
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(BeanConfig.class);
Person person = ac.getBean(Person.class);
}
setter方法注入
public class Person {
private Integer id;
private String name;
private Dog dog;
//setter
}
public class Dog {
private Integer id;
private String name;
//setter
}
public class BeanConfig {
@Bean
public Person getPerson(Dog dog1) {
Person person = new Person();
person.setId(1);
person.setName("codingfuture");
person.setDog(dog1);
return person;
}
@Bean
public Dog dog1(){
Dog dog = new Dog();
dog.setId(1);
dog.setName("大黄");
return dog;
}
@Bean
public Dog dog2(){
Dog dog = new Dog();
dog.setId(2);
dog.setName("小黄");
return dog;
}
}
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(BeanConfig.class);
Person person = ac.getBean(Person.class);
}