栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring IOC基本操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring IOC基本操作

Spring框架介绍
概念:Spring是一个开源的框架,并且是一个轻量级的java开发框架
前身:interface21是他的前身
Spring理念:使现有的技术更加容易使用,本身就是一个大杂烩,整合了现有的主流技术框架
优点:

方便解耦,简化开发 (高内聚低耦合)

Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
spring工厂是用于生成bean

AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

声明式事务的支持

只需要通过配置就可以完成对事务的管理,而无需手动编程

方便程序的测试

Spring对Junit4支持,可以通过注解方便的测试Spring程序

方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

降低JavaEE API的使用难度

Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
 Spring是一个开源的免费框架(容器)
 Spring是一个轻量级的,非入侵式的框架
 Spring支持事务的处理,对框架的整合的支持

总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架

 控制反转(IOC容器)
IOC原型:
之前: userDao 接口 userDaoImpl实现类 userService业务接口 userServiceImpl业务实现类
缺点: 代码量大,修改成本高,若是多个业务需要频繁修改对象
解决: 在userServiceImpl使用set注入来被动创建对象


区别: 之前是程序主动创建对象,是程序员来控制的。现在使用set注入后不在具有主动性,变成了被动接收对象,不用再修改业务模块的代码
优点: 这种思想本质上的解决了问题,程序员不需要再管理对象的创建,系统的耦合性大大降低,更加专注于业务的实现上。

IOC本质: 

 1.控制反转loC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法
2.没有loC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,
3.控制反转是一种通过描述(XML或注解)并通过第3方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)

接下来由一个小案例让大家感受一下IOC                                                                      

案例:HelloSpring
两个Dao层实现类,一个业务层实现类由spring创建并统一管理

业务层实现类对象含有Dao实现类的对象参数


由spring创建并统一管理后,直接操作xml文件即可修改获取的对象,对象统一管理创建,无须在硬代码中频繁创建对象,耦合性极大降低。

 

 总结:
●hello对象是由谁创建的?
hello对象是由Spring创建的
●Hello 对象的属性是怎么设置的?
hello对象的属性是由Spring容器设置的,
这个过程就叫控制反转:
控制: 谁来控制对象的创建?传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建
反转: 程序本身不创建对象,而变成被动的接收对象.
依赖注入: 就是利用set方法来进行注入的.

IOC是一种编程思想,由主动的编程变成被动的接收.
OK,到了现在,我们彻底不用再程序中去改动了,要实现不同的操作,只需要在xm|配置文件中进行修改
所谓的IoC, 一句话搞定对象由Spring来创建,管理,装配!

注意: 在配置文件加载的时候,也就使用getBean的时候,容器中的对象就已经初始化了!

接下来讲解一下IOC的几种注入方式                       

Bean的配置
1.关于bean的配置:
id : bean的唯一标识符,也就是相当于对象的引用
class : bean对象所对应的类:包名+类型
name : 也是别名,而且name可以同时取多个别名
例子:
2.关于import的配置:
import一般用于团队开发使用,他可以将多个配置文件,导入合并为一个;

IOC------依赖注入
1.普通值注入


2.bean注入

3.数组注入


    
        西游记
        水浒传
        红楼梦
    

4.list集合注入


    
        玩游戏
        听音乐
    

5.map集合注入


    
        
        
    

6.properties配置文件注入

 
            
                JX200201
            
 

IOC------拓展注入
1.p命名空间注入,可以直接注入属性的值: property

 

2.c命名空间注入,通过构造器注入: construct-args

 

Bean的作用域
1.单例模式(Spring默认机制)-(singleton)

2.原型模式:每次从容器中get的时候,都会产生一新对象!(prototype)

 

3.其余的request. session. application. 这些个只能在web开发中使用到!

 IOC------Bean的自动装配
1.ByName自动装配:byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid


    

2.ByType自动装配: byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean


 

    

小结:
●byname的时候,需要保证所有bean的id唯一, 并且这个bean需要和自动注入的属性的set方法的值一致!
●bytype的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注 入的属性的类型一致!

IOC------注解实现自动装配
要使用注解须知:

1.导入约束: context约束
2.配置注解的支持: context annotation-config. [重要]
方式

1.指定要主描的包,这个包下的注解就会生效

 

2.@component

@Component 组件等价于
@Component:组件放在类上,说明这个类被Spring管理了,就是bean;

3.@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层;

dao [@Repository]
service [@Service]
servlet [ @Controller]

这四个注解功能都是一样的,都是代表将某个类注册到Spring中,进行装配
作用域注解: @Scope("")

4. @Autowired
直接在属性.上使用即可!也可以在set方式上使用!
使用Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC(Spring) 容器

注意:
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解[@Autowired] 完成的时候、我们可以使用@Qualifier(value=“xx”)去配置@Autowired的使用,指定一个唯一的bean对象注入!

public class People {
    @Autowired
    @qualifier(value="cat111")
    private cat cat;
     @Autowired
     @qualifier(value=" dog222")
     private Dog dog;
}

总结:
@Resource和@ Autowired的区别:
●都是用来自动装配的,都可以放在属性字段上
●@ Autowired通过byType的方式实现,而且必须要求这个对象存在! [常用]
●@ Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现! 如果两个都找不到的情况下,就报错!

xml与注解:
xml 更加万能,适用于任何场合! 维护简单方便;
注解不是自己类使用不了,维护相对复杂。
xml与注解最佳实践:
xml用来管理bean;
注解只负责完成属性的注入;
我们在使用的过程中,只需要注意一个问题: 必须让注解生效,就需要开启注解的支持
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号