Spring是什么:
Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IOC(inverse of control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层Spring MVC 和持久层Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用对多的JavaEE企业应用开源框架。
Spring的优势:
免费,开源
方便解耦,简化开发
AOP编程的支持
声明式事务的支持
方便程序的测试
方便集成各种优秀框架
降低JavaEE API的使用难度
源码是经典的学习范例
IOC控制反转:
IOC(inverse of control:反转控制)是一种思想
之前:
UserDao 接口
UserDaoImpl 接口实现类
UserService 业务接口
UserServiceImpl 业务实现类
在我们之前的业务中,我们需要根据用户的需求去修改代码,增加对应的UserServiceImpl中的代码。在代码量十分庞大的情况下,修改的成本非常昂贵
我们在UserServiceImpl中使用set方法改变这种情况:
private UserDao userDao;
//利用set进行动态实现值的注入
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void getUser(){
UserDao.getUser();
}
之前,程序主动创建对象,控制权在程序员手上
使用set方法来实现值的注入后,程序不再具有主动性,而是变成的被动的接受对象
这种思想从本质上解决了问题,程序员不再需要去管理对象的创建了,系统的耦合性大大降低。这就是IOC的原型。
参见:https://www.cnblogs.com/hellokuangshen/p/11249253.html
HelloSpring:
创建java实体类:
package com.it.pojo;
public class Hello {
private String str;
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
public void setStr(String str) {
this.str = str;
}
public String getStr() {
return str;
}
}
创建beans.xml配置文件
<?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">
<!-- 使用Spring来创建对象,在Spring中这些都称为bean -->
<bean id="hello" class="com.it.pojo.Hello">
<property name="str" value="Spring"/>
</bean>
</beans>
测试
import com.it.pojo.Hello;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//获取Spring的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//对象都在Spring中管理,使用只需直接调用
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello.toString());
}
}
IOC创建对象方式:
下标赋值:
<bean id"user" class="com.it.pojo.User">
<constructor-arg index="0" value="Java"/>
</bean>
通过类型创建(不建议使用):
<bean id"user" class="com.it.pojo.User">
<constructor-arg type="java.lang.String" value="Java"/>
</bean>
直接通过参数名设置:
<bean id"user" class="com.it.pojo.User">
<constructor-arg name="name" value="Java"/>
</bean>
在配置文件加载的时候,容器中被管理的对象就已经被初始化了