三大框架之Spring(2)

来源:互联网 发布:无敌淘宝王无弹窗 编辑:程序博客网 时间:2024/05/22 04:43

DI (Dependencies Injection) 依赖注入

一 set注入
属性的注入,必须添加set方法。
执行过程:spring会找到所有的set方法,找到 setName 变形 –>name值与 进行匹配,如果匹配成功则进行赋值。
domain–Person:
这里写图片描述

applicationContext.xml :
这里写图片描述

set 为复杂类型赋值
通过set注入方式可以为复杂类型赋值 list、set、map、properties

Person:
这里写图片描述

applicationContext.xml :
**这里写图片描述**

二 构造器注入
如果对象创建时使用构造方法进行注入,则可以不写无参构造

使用构造方法进行注入时需要注意:
1.尽量使用index进行赋值
原因:在没有导入源码的条件下 IDE自动生成代码时 就会出现arg0,arg1的情况
2.参数的个数:
使用构造方法注入时 一定保证 构造参数匹配 否则会报错。

三 parent属性
在Spring容器中创建时,如果有子父级关系。需要通过parent属性指明。这样spring容器在创建对象时,帮助维护字符集关系。将dataSource注入到baseDao中,而不是它的子类
这里写图片描述

四 初始化—销毁方法

init-method="init" destroy-method="destroy"

Spring容器可以直接调用初始化 和销毁方法,需要用户指明方法名称即可

五 autowire属性
autowire可以简化xml的配置,能够做到自动的装配,autowire有两种装配方式:

1.byName 必须先有set方法
首先会查找所有的set方法
setCat(Cat cat) –>去掉set把首字符小写–>cat–>与bean中的ID进行比较,
如果能够匹配,则能正确注入。如果匹配不到,则注入失败,容器也不会报错。

2.byType
setCat(Cat cat) –>去掉set把首字符小写–>cat–>找到对应的类型(包名.类名)–>然后与bean中的class进行匹配,如果匹配成功则注入。如果有重复的class,则报错!

六 全局的autowire
如果当前bean中配置了 autowire 则按照bean中配置的为准(就近原则)

七 属性注解
1 @Autowired – 两种注入方式有可能都会做,也可能会报错,先名称后类型。
有两种注入方式:1通过匹配属性的名称与bean中的ID匹配,匹配成功则注入,匹配不成功则按照类型去匹配,如果类型还没有匹配成功则报错。

按照指定的ID匹配

@Autowired@Qualifier(value="catA")

如果想实现按照ID匹配,则必须借助@Qualifier(value="catA")注解才能完成。

2 @Resource(name=”xxx”)
@Resource注解的作用,其实就是@Autowired@Qualifier(value="catA")的一个增强版。
使用一个注解就能够完成按属性名称匹配,按属性类型匹配,按照指定的ID匹配。
省略了:<property>set()方法
<bean>的个数没有减少
如果是大型文件,bean的数量是非常多的,引入了类的注解。

八 类的注解
1 开启包扫描

<context:component-scan base-package="xxx">

只要开启包扫描,默认开启属性注解!
多个包之间用逗号隔开,包的子孙包也会全部扫描到

@Component注解
为需要创建对象的类添加@Component注解,那么在Spring容器启动时,先按照包扫描给定的包进行扫描,当扫描到@Component注解的类时就会为当前的这个类创建对象,在创建对象的过程中,如果需要属性注入,则一并注入,将生成的对象存放到了Map中,Map中的Key就是当前类名首字母小写。

id的自动生成规则
当第二个字母大写则生成的ID就是类名PErson,如果第二个字母小写则首字母小写。
可以实现BeanNameAware接口,查看当前bean的id

@Component(value=”1608”) 指定bean的id
只有一个value的话,value可以省略

Spring为程序分层做了不同的注解,可以混用,

web         @Controllerservice     @Servicedao         @Repository

以上三个注解的作用和@Component一样,只是为了软件分层而设计的,方便程序员阅读。

九 引入外部配置文件
1.导入外部配置文件

<context:property-placeholder location="classpath:/jdbc.properties"/>

2.通过${配置文件的key}能够得到value值
思路:
当Spring容器加载外部文件时会将key和value保存到Spring容器中,之后通过${xxx}可以动态的获取值。

使用场景:
配置数据库的数据源时使用
Driver url username password

通过注解为基本类型赋值
@Value(xxx)
如果给复杂类型赋值 需要引入util头文件
这里写图片描述

面向接口编程
通过实现类实现接口的方式形成了接口与实现类的组合。在编程中通常属性的类型都是接口类型,这样做的好处是能够实现松耦合,这种编程方式叫做面向接口编程。
面向接口编程的好处是能够随意切换具体的实现类,而不用修改任何代码。

Spring的IoC和DI和面向接口编程的意义
使用Spring的IoC和DI,加上面向接口编程,
这样的代码结构可以做到最大程度的松耦合。

0 0
原创粉丝点击