java spring di_JavaWeb_(Spring框架)Spring中IoC与DI概念入门

202b8ad5aa751eed8cfde56b30773a21.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Spring是于2003 年兴起的一个轻量级的Java 开源框架,它由Rod Johnson创建。传统J2EE应用的开发效率低,Spring作为开源的中间件,提供J2EE应用的各层的解决方案,Spring贯穿了表现层、业务层及持久层,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式(full-stack)”选择。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。

简单来说,Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

Spring是什么?

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1、方便解耦,简化开发

通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

2、AOP编程的支持

通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

3、声明式事务的支持

在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

4、方便程序的测试

可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

5、方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts、Hibernate、MyBatis 、Hessian、Quartz)等的直接支持。

6、降低Java EE API的使用难度

Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

为什么要使用Spring?

创建工程,导入jar包

7ac2583a8a0e8d8c4dd6cd6df021ff7a.png

核心包:bean、context、core、expression;

日志包:apache.commons.logging

引入约束:bean约束和引入主配置文件头;

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

applicationContent.xml

测试:将自定义对象由自己创建交由Spring管理

6547a2991a6ed531d17fca4ad7bb9c00.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.Gary.bean;public classUser {privateInteger u_id;privateString u_username;privateString u_password;publicInteger getU_id() {returnu_id;

}public voidsetU_id(Integer u_id) {this.u_id =u_id;

}publicString getU_username() {returnu_username;

}public voidsetU_username(String u_username) {this.u_username =u_username;

}publicString getU_password() {returnu_password;

}public voidsetU_password(String u_password) {this.u_password =u_password;

}

}

User.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.Gary.test;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.Gary.bean.User;public classHelloSpring {

@Testpublic voidTest1() {

User u= newUser();

System.out.println("Test1()"+u);

}//Spring是一个容器,它将帮助我们管理对象

@Testpublic voidTest2() {//根据spring配置文件获取容器对象

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//User u = ac.getBean(User.class);//通过getBean获取配置好的user对象,程序员向Spring容器要对象

User u = (User) ac.getBean("user");

System.out.println("Test2()"+u);

}

}

HelloSpring.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

applicationContext.xml

Spring-IoC | DI概念介绍:(要实现IOC依赖DI的支持)

IoC(Inversion of Control):反转控制:将我们自己创建对象的工作交给Spring容器帮我们完成;

DI(Dependency Injection):依赖注入:将值通过配置的方式为变量初始化/赋值(注入);

IOC的反转:创建对象这份工作由我们自己执行反转给spring帮我们执行;

IOC的控制:就是由spring帮我们负责创建销毁对象,掌控对象的生命周期等,我们在需要使用对象的时候跟Spring申请即可;

IOC是一种编程思想,也是一种新的设计模式,它需要DI(依赖注入)技术的支持;

c)注入方式:set方法注入、构造注入、字段注入(不推荐);

d)注入类型:

i.值类型(value) – 八大基本数据类型;

ii.引用类型(ref) – String、自定义对象;

spring是一个容器,它将帮我们管理对象

传统方式给u_id赋值

@Testpublic voidTest1() {

User u= newUser();//传统方式给u_id赋值

u.setU_id(1);

System.out.println("Test1()"+u);

}

Spring给u_id赋值

@Testpublic voidTest2() {//根据spring配置文件获取容器对象

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//User u = ac.getBean(User.class);//通过getBean获取配置好的user对象,程序员向Spring容器要对象

User u = (User) ac.getBean("user");

System.out.println("Test2()"+u);

}

601d28a1fa61580a2b59f0ab5aadfbed.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.Gary.test;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.Gary.bean.User;public classHelloSpring {

@Testpublic voidTest1() {

User u= newUser();//传统方式给u_id赋值

u.setU_id(1);

System.out.println("Test1()"+u);

}//Spring是一个容器,它将帮助我们管理对象

@Testpublic voidTest2() {//根据spring配置文件获取容器对象

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//User u = ac.getBean(User.class);//通过getBean获取配置好的user对象,程序员向Spring容器要对象

User u = (User) ac.getBean("user");

System.out.println("Test2()"+u);

}

}

HelloSpring.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

applicationContext.xml

使用Spring改造Servlet项目对象关系依赖图

920d9a268e44b8df90ae1dd26be322c9.png


版权声明:本文为weixin_33526828原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。