Spring的入门案例2
1.构造方法注入
要求:
如果使用构造方法注入时,应该添加构造方法,但是先写无参构造
引用:
注意:
构造方法中的参数必须与配置文件中参数的个数一致,否则报错。
说明:
由于java中不会维护形参的名称,所以使用name属性进行注入时,可能会有风险。所以以后一律使用index下标进行赋值。
注入方式的分析:
如果程序员自己写代码,set注入居多,如果是软件架构使用构造注入居多。
2.简化property配置
以后可以不用写property方法也能照常注入。
autowire标签的注入方式:
全局变量配置:
autowire="default" 将不起任何作用
如果配置了全局配置,则无需再写bean标签中的autowire.
注入说明:
使用自动装配,只能注入引用类型,基本类型和集合使用原有的方法。
3.属性注解
1.编辑配置文件的头
1.引入context约束文件
2.编辑配置文件
3.添加模板类
2.Autowired注解
1.开启属性注解
2.引入注解
3.错误信息:
由于没有找到匹配的bean报错
4.指定Id进行注入:
@Autowired
@Qualifier(value="dogB") //表示强制指定ID进行注入 2个注解必须一起使用,否则报错
2.@Resource
说明:功能上和@aotuwired一致,都能上实现属性注入。
1.根据属性名称匹配bean的Id
2.根据属性类型匹配bean的class
3.指定Id进行注入
@Resource(name="dogA") //java扩展包中的
说明:
1.如果是单个项目使用任意一个都可以
2.如果是多个项目,则使用@Autowired
4.类的注解
需求:
由于大型项目中需要使用的bean很多,如果都将这些bean写入配置文件中,会导致整个配置文件特比的混乱。
思路:
需要采用一种方式,告诉spring容器创建指定的对象
办法:
1.开启包扫描:
2.添加注解:
5.ID生成策略:
默认规则:
如果使用注解的方式创建对象,会根据类名自动的生成bean的Id,并且Id为类型首字母小写。
案例:
类名: ID名:
NBA NBA
NbA nbA
nBA nBA
CBGabc CBGabc
CbGa cbGa
规则:
ID的生成策略其实根据第二个字母决定,第二个字母如果大写,则保持类名不变。如果第二个字母小写,首字母才会小写。
扩展:
采用接口的形式,回显bean的Id
6.注解的使用原理:
1.当容器启动时,首先会加载spring的配置文件。
2.根据包扫描指定的包路径spring会扫描当前包下的全部子孙包。
3.在扫描时如果发现类上还有@Component注解,则会根据spring的规则为其创建对象。将对象创建通过反射创建完成后,存入spring所维护的map中,key就是类名首字母小写。value就是生成的对象。
4.如果类中需要进行对象注入
则在创建对象的之后,自动的根据注解的匹配规则为其注入正确的对象,如果对象正确注入。则spring返回正确的对象
如果注入有误,spring则会发出报错信息。容器启动失败。
7.Spring创建对象所经历的生命周期(简版)
1.对象创建
2.初始化方法init
3.通过对象完成实际操作
4.对象销毁
1.xml配置文件的方式
2.注解形式:
@PostConstruct //构造方法之后执行
@PreDestroy //容器销毁之前
前提:开启包扫描
8.同类型注解
@Scope(value="protoType") //对象的单例和多例
@Lazy(true) //表示懒加载
@Component //万能注解
@Controller //控制层的注解
@Service //业务层注解
@Repository //持久层的注解
功能上和@Component没有任何差别,为了让程序员编程更加的明确,定义的。
@Component(value="tom")
指定Bean的Id为tom
案例:
问题:如果一个接口有多个实现类,则在进行注入时,有多个实现类的原因。会导致注入出错。
总结:
1.在框架中一个接口最好单实现。
扩展:
2.假如多实现的情况不能避免,
则灵活的采用id赋值的方式,进行人为的定义。
人为的指定bean的Id,之后通过@Autowired实现灵活的赋值
引入指定的对象
9.Spring的注解形式实现MVC
Spring通过注解形式引入对象。
10.Spring和面向接口编程的好处
Spring中的IOC和DI一起联用,再加面向接口编程,可以将耦合性降到最低
(现阶段)
11.为属性赋值
1.为基本类型赋值
2.为基本类型动态赋值
<!--加载外部配置文件 -->
<context:property-placeholder location="classpath:/1707.properties"/>
${key} key是配置文件中定义的部分
3.为集合赋值
1.引入头标签:
2.定义集合
3.属性引入: