首先,spring是一个开源框架,作用是降低程序的复杂性,可以整合各种流行框架。它主要的技术是IOC和AOP,这次主要记录IOC和DI的原理及使用
过程是先把jar包导入到工程中——编写配置文件——编写测试文件
1.使用FactoryBean来管理bean,采用了经典的工厂模式,通过从XML文件或属性文件中读取Javabean的定义。
2.BeanFactory实现了IOC控制,而ApplicationContext扩展了BeanFactory,在这个容器中提供了对其他框架的集成,任务调用等企业服务。
——什么是控制反转和依赖控制?
IOC(Inversion of Control):就是通过类来创建实例的工作交给了IOC容器,就是对象的创建是通过容器来实现的,开发代码时直接使用类的实例。
spring支持两种依赖注入(不支持接口注入):
1),setter注入,基于Javabean中的setter方法注入属性值。举例如下所示:
导入spring的jar包到Java project工程中,导入路径为:
第一步:点击项目右键——选择build path——Configure build Path——选择Libraries选项卡——点击Add External JARs...——然后把spring的jar包导入就OK了
第二步:写实体类和配置文件
实体类文件如下所示:
package com.gp.service;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void show(){
System.out.println("姓名是: "+username+" , 密码是:"+password);
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
配置文件applicationContext.xml,在src下直接建立的,文件内容如下所示:
<?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 id="user" class="com.gp.service.User">
<property name="username" value="zhangsan"/>
<!-- 调用的是setUsername后面的值,即把set后的第一个字母小写即可 -->
<property name="password" value="123456"/>
</bean>
</beans>
第三部,编写测试文件:
package com.gp.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.gp.service.User;
public class TestUser {
public static void main(String[] args) {
//spring容器是在此处进行初始化的,对象的创建是有spring容器创建的,此处加载容器,
//通过getBean来获取对象,里面的参数是由xml文件中bean标签的id
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=(User) context.getBean("user");
user.show();
}
}
运行结果如下所示:
姓名是: zhangsan , 密码是:123456
2),构造器注入,基于构造方法为属性赋值。容器通过调用类的构造器调用类的构造方法,将其所需的依赖关系注入其中。(好处,在实例化对象的同时就完成了属性的初始化)
默认是调用类的默认构造函数,若编写自定义的构造方法,一定要重写默认的构造方法。
实体类修改如下所示;
public User1(String username,String password){
this.username=username;
this.password=password;
}
配置文件修改如下 所示:
<bean id="user" class="com.gp.service.User1">
<constructor-arg index="0" type="java.lang.String" value="zhangsan"/>
<constructor-arg index="1" type="java.lang.String" value="123456"/>
</bean>
测试文件不变,运行结果同上所示一样。
来源:https://www.cnblogs.com/gpx-startup/p/8563224.html