Spring的入门案例2

1.构造方法注入

要求:

如果使用构造方法注入时,应该添加构造方法,但是先写无参构造

引用:

Spring的入门案例2

Spring的入门案例2

注意:

构造方法中的参数必须与配置文件中参数的个数一致,否则报错。

说明:

由于java中不会维护形参的名称,所以使用name属性进行注入时,可能会有风险。所以以后一律使用index下标进行赋值。

 

Spring的入门案例2

 

注入方式的分析:

如果程序员自己写代码,set注入居多,如果是软件架构使用构造注入居多。

 

2.简化property配置

以后可以不用写property方法也能照常注入。

autowire标签的注入方式:

Spring的入门案例2

全局变量配置:

autowire="default" 将不起任何作用

如果配置了全局配置,则无需再写bean标签中的autowire.

注入说明:

使用自动装配,只能注入引用类型,基本类型和集合使用原有的方法。

 

 

3.属性注解

1.编辑配置文件的头

1.引入context约束文件

Spring的入门案例2

2.编辑配置文件

Spring的入门案例2

 

3.添加模板类

 

Spring的入门案例2

2.Autowired注解

1.开启属性注解

Spring的入门案例2

2.引入注解

Spring的入门案例2

 

Spring的入门案例2

3.错误信息:

由于没有找到匹配的bean报错

 

Spring的入门案例2

4.指定Id进行注入:

@Autowired

@Qualifier(value="dogB")  //表示强制指定ID进行注入    2个注解必须一起使用,否则报错

Spring的入门案例2

2.@Resource

说明:功能上和@aotuwired一致,都能上实现属性注入。

1.根据属性名称匹配beanId

2.根据属性类型匹配bean的class

3.指定Id进行注入

@Resource(name="dogA")   //java扩展包中的

 

说明:

1.如果是单个项目使用任意一个都可以

2.如果是多个项目,则使用@Autowired

 

4.类的注解

需求:

由于大型项目中需要使用的bean很多,如果都将这些bean写入配置文件中,会导致整个配置文件特比的混乱。

思路:

需要采用一种方式,告诉spring容器创建指定的对象

办法:

1.开启包扫描:

Spring的入门案例2

 

2.添加注解:

Spring的入门案例2

 

5.ID生成策略:

默认规则:

如果使用注解的方式创建对象,会根据类名自动的生成beanId,并且Id为类型首字母小写。

案例:

类名:           ID名:

NBA        NBA

NbA        nbA

nBA                 nBA

 

CBGabc    CBGabc

CbGa      cbGa

 

规则:

ID的生成策略其实根据第二个字母决定,第二个字母如果大写,则保持类名不变。如果第二个字母小写,首字母才会小写。

 

扩展:

采用接口的形式,回显beanId

Spring的入门案例2

 

6.注解的使用原理:

1.当容器启动时,首先会加载spring的配置文件。

2.根据包扫描指定的包路径spring会扫描当前包下的全部子孙包。

3.在扫描时如果发现类上还有@Component注解,则会根据spring的规则为其创建对象。将对象创建通过反射创建完成后,存入spring所维护的map中,key就是类名首字母小写。value就是生成的对象。

 

4.如果类中需要进行对象注入

则在创建对象的之后,自动的根据注解的匹配规则为其注入正确的对象,如果对象正确注入。则spring返回正确的对象

如果注入有误,spring则会发出报错信息。容器启动失败。

 

7.Spring创建对象所经历的生命周期(简版)

1.对象创建

2.初始化方法init

3.通过对象完成实际操作

4.对象销毁

 

Spring的入门案例2

1.xml配置文件的方式

Spring的入门案例2

 

2.注解形式:

@PostConstruct  //构造方法之后执行

@PreDestroy      //容器销毁之前

 

前提:开启包扫描

Spring的入门案例2

8.同类型注解

@Scope(value="protoType")  //对象的单例和多例

@Lazy(true)                //表示懒加载

 

@Component              //万能注解

 

@Controller               //控制层的注解

@Service                       //业务层注解

@Repository               //持久层的注解

功能上和@Component没有任何差别,为了让程序员编程更加的明确,定义的。

 

@Component(value="tom")

指定BeanIdtom

 

案例:

问题:如果一个接口有多个实现类,则在进行注入时,有多个实现类的原因。会导致注入出错。

Spring的入门案例2

 

总结:

1.在框架中一个接口最好单实现。

 

扩展:

2.假如多实现的情况不能避免

则灵活的采用id赋值的方式,进行人为的定义。

人为的指定beanId,之后通过@Autowired实现灵活的赋值

 

Spring的入门案例2

Spring的入门案例2

 

引入指定的对象

Spring的入门案例2

 

9.Spring的注解形式实现MVC

Spring的入门案例2

Spring的入门案例2

Spring的入门案例2

 

Spring通过注解形式引入对象。

 

 

10.Spring和面向接口编程的好处

Spring的入门案例2

Spring中的IOCDI一起联用,再加面向接口编程,可以将耦合性降到最低

(现阶段)

 

11.为属性赋值

1.为基本类型赋值

Spring的入门案例2

2.为基本类型动态赋值

<!--加载外部配置文件  -->

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

Spring的入门案例2

${key}  key是配置文件中定义的部分

 

3.为集合赋值

1.引入头标签:

Spring的入门案例2

 

2.定义集合

Spring的入门案例2

3.属性引入:

Spring的入门案例2