Spring是什么
- 开源框架
- 为简化企业级应用开发而生,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能
- 是一个IOC(DI)和AOP容器框架
具体描述Spring
- 轻量级:非侵入性的-基于Spring开发应用中的对象可以不依赖Spring的API
- 依赖注入(DI–dependency injection,IOC)
- 面向切面编程(AOP–aspect oriented programming)
- 容器
- 框架
- 一站式
配置Spring环境
- eclipse插件 Spring Tool Suite的安装,详见教程:https://blog.csdn.net/xingyun_yj/article/details/80033621
(注意:记得一定等eclipse进度条显示下载完毕再进行重启,下载失败或许是因为网不好。。。) - jar包的导入
下载导入commoms- logging.jar
IOC&DI
- IOC 反转控制
容器主动地将资源推送给它所管理的组件,组件选择合适的方式来接受资源
- DI 依赖注入
组件以一些预先定义好的方式(例如setter方法)接受来自如容器的资源注入
配置Bean
-
配置形式:基于XML文件;基于注解
-
配置方式:通过全类名(反射),通过工厂方法(静态工厂方法&实例工厂方法),FactoryBean
-
IOC容器的实现:BeanFactory&ApplicationContext
BeanFactory:Spring框架的基础设施,面向Spring本身
ApplicationContext:BeanFactory的子接口,面向Spring框架的开发者,几乎所有的场合都使用ApplicationContext
ApplicationContext的实现类
ClassPathXmlApplicationContext:从类路径下加载配置文件
FileSystemXmlApplicationContext:从文件系统中加载配置文件
ApplicationContext新增方法:refresh(),close() 使具有启动,刷新,关闭上下文能力
ApplicationContext在初始化上下文时就实例化所有单例的Bean
- 依赖注入的方式:
属性注入:通过setter方法注入Bean的属性值或依赖对象
构造器注入:构造器注入在元素里声明属性
工厂方法注入(不推荐)
<!-- 配置bean
class:bean的全类名,通过反射方式在IOC容器中创造bean,要求在bean里必须有无参构造器,若没有,则报错
id:标识容器中的bean,id值唯一
属性注入:<property name="name" value="Shi"></property>
构造器注入:<constructor-arg value="240" type="int"></constructor-arg>
-->
<bean id="helloWorld" class="com.spring.beans.HelloWorld">
<property name="name" value="Shi"></property>
</bean>
<!--使用构造器注入属性值可以指定参数的位置和参数的类型,以区分重载构造器-->
<bean id="car" class="com.spring.beans.Car">
<constructor-arg value="baoma" type="java.lang.String"></constructor-arg>
<constructor-arg value="240" type="int"></constructor-arg>
</bean>
若只有有参构造器,报错情况
//测试类
package com.spring.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");报错
是导入
import org.springframework.context.ApplicationContext;
而不是导入这个
import org.apache.catalina.core.ApplicationContext;
*/
public class Main {
public static void main(String[] args) {
//1.创建spring的IOC容器对象
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//2.从IOC容器中获取Bean实例(id获取和类型获取)
//id获取:利用id定位到IOC容器中的Bean
HelloWorld helloWorld=(HelloWorld)context.getBean("helloWorld");
//类型获取:利用类型返回IOC容器中的Bean,但要求IOC容器中必须只能有一个该类型的Bean
//HelloWorld helloWorld=context.getBean(HelloWorld.class);
//3.调用hello方法
helloWorld.hello();
}
}
//Bean类
package com.spring.beans;
public class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public void hello() {
System.out.println(name+",hello!");
}
public HelloWorld() {
System.out.println("HelloWorld's Constructor...");
}
@Override
public String toString() {
return "HelloWorld [name=" + name + "]";
}
}