最近在尚硅谷上自学spring框架。既然是自学,那么总结最重要,接下来我把每次学习的总结写成博客以便以后自己回顾和给一些想自学spring框架的人作作参考过。
spring框架是个轻量级的 JavaEE框架,所谓轻量就是在开发中的对象可以不依赖Spring的API。
spring是为了简化企业级应用开发而生的,使用spring我们可以不必自己去创建对象,而交给spring的容器去创建,这就是控制反转(IOC)也可以说成依赖注入(DI),通俗来说控制反转就是把原来由我们自己创建对象的过程交给IOC容器来做。
首先我们把开发需要准备的jar包和eclipse插件准备好。
需要的基本jar包
同时需要安装 SPRING TOOL SUITE 插件以便开发中使用
那么接下来按照国际惯例,先来个HelloWorld
package com.etc;
public class HelloWorld {
private String userName;
public void setUserName(String userName) {
System.out.println("HelloWorld执行了set方法");
this.userName = userName;
}
public void hello(){
System.out.println("Hello:"+userName);
}
public HelloWorld() {
super();
System.out.println("HelloWorld执行构造方法");
}
}
注:spring的配置文件名称和位置不是固定的,但是官方建议将配置文件放在src目录下,且命名为applicationContext.xml
package com.etc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
//1.创建Spring的IOC容器
//ClassPathXmlApplicationContext是ApplicationContext接口的实现类, 该实现类从类路径下加载配置文件。
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.从IOC容器中获取Bean实例
//通过id获取Bean
HelloWorld helloworld = (HelloWorld)ctx.getBean("helloWorld");
//通过类型获取Bean,不推荐这样使用,因为如果在appliactionContext.xml中配置了两个HelloWorld,那么IOC容器会不知道要放回哪一个
HelloWorld helloworld2 = (HelloWorld) ctx.getBean(HelloWorld.class);
//3.调用hello方法
helloworld.hello();
helloworld2.hello();
}
}
现在我们来仔细的看看在spring的IOC容器中依赖注入的方式
spring支持3种依赖注入的方式
属性注入需要使用
类似下图这样使用
通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用,构造器注入在
举个例子
package com.etc;
public class Car {
private String brand;
private String corp;
private double price;
private int maxSpeed;
public Car(String brand, String corp, double price) {
super();
this.brand = brand;
this.corp = corp;
this.price = price;
}
public Car(String brand, String corp, int maxSpeed) {
super();
this.brand = brand;
this.corp = corp;
this.maxSpeed = maxSpeed;
}
public String toString() {
return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price
+ ", maxSpeed=" + maxSpeed + "]";
}
}
package com.etc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Car car = (Car) ctx.getBean("car1");
System.out.println(car);
car = (Car) ctx.getBean("car2");
System.out.println(car);
}
}