什么是Spring
简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架
spring优点
⭐Spring是一个开源的免费的框架(容器)
⭐Spring是一个轻量级的、非入侵式的框架
⭐控制反转(IOC).面向切面编程(AOP)
⭐支持事务的处理,对框架整合的支持
总结一句话:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOPl的框架
Spring 框架结构
IOC本质
控制反转loC(Inversion of Control),是一种设计思想,Dl(依赖注入)是实现loC的一种方法,也有人认为DI只是loC的另一种说法。没有loC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配苦的目的。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是loC容器,其实现方法是依赖注入(Dependency Injection,Dl).
总结:
1、低侵入式设计,代码污染极低
2、独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
3、Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
4、Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
5、Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
6、Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
代码实例:
1.编写一个Hello实体类
public class Hello {
private String str;
public String getStr() {
return str;
}
//依赖注入:就是用set方法来进行注入
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
2.编写我们的Spring文件,这里我命名为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中都称为对象-->
<!-- id=变量名
class=new 的对象
property 相当于给对象中的属性设置一个值!
-->
<!--
ref标签:用来引用另一个bean:
<ref bean="viewResolver"/>,在spring容器中群钊id为viewResolver的bean对象
-->
<bean id="hello" class="cn.yyj.pogo.Hello">
<property name="str" value="这是我的值"></property>
</bean>
</beans>
3.进行测试
import cn.yyj.entity.EmpInfo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
test1();
}
private static void test1() {
ApplicationContext ps=new ClassPathXmlApplicationContext("sunmer.xml");
EmpInfo es= (EmpInfo) ps.getBean("empInfo");
System.out.println(es.getAddress().getHomeAddress());
System.out.println(es.getAddress().getSchoolAddress());
System.out.println(es.getPname());
}
}
结果:
输出Spring中的value值