文章目录
spring概念
1.Spring是一个项目管理框架,同时也是一套Java EE解决方案。
2.Spring是众多优秀设计模式的组合(工厂、单例、代理、适配器、包装器、观察者、模板、策略)。
3.Spring并未替代现有框架产品,而是将众多框架进行有机整合,简化企业级开发,俗称"胶水框架"。
spring组成
1.核心技术:依赖注入,事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP。
2.测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。
3.数据访问:事务,DAO支持,JDBC,ORM,封送XML。
4.Spring MVC和 Spring WebFlux Web框架
5.集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。
6.语言:Kotlin,Groovy,动态语言。
spring工程编码
- 定义目标bean类型
- 在applicationContext.xml文件的中配置bean标签(会使用空参构造器)< bean id=“” class=“” >
- 调用spring工厂API
new ClassPathXmlApplicationContext(“applicationContext.xml”);
ac.getBean(“applicationContext.xml中bean的id”)
调用方法
spring依赖关系
Jar包彼此存在依赖,只需引入最外层的Jar,即可由Maven自动将相关依赖Jar引入到项目中。
控制反转(IOC)
1. 由自己创建对象,变为工厂推送(变主动为被动,即为反转)
2. 解耦操作(如service 和 dao层解耦)
(1)在service层中创建dao属性。dao实现类对象由工厂创建
(2)在主配置文件中,
< bean >
< property name=“属性名” ref=“对应类型的bean的id” >
< /bean >
3. 三种不同bean的引入形式
- new对象的形式:
< bean id=" " class=" " /> - 类的工厂方法创建对象:
< bean id=" " class=" " factory-method=“getInstance” /> - 对象调用方法创建对象
< bean id=" " class=" " factory-bean=" 对象 " factory-mathod=" " />
依赖注入(DI)
在Spring创建对象的同时,为其属性赋值,称之为依赖注入。
set注入
1. 普通类型
<bean id="u1" class="com.qf.spring.part1.injection.User">
<property name="id" value="1001" />
<property name="password" value="123456" />
<property name="sex" value="male" />
<property name="age" value="20" />
<property name="bornDate" value="1990/1/1" />
</bean>
2. 引用类型
<!--name=" " ref="指向另一个已存在的bean"-->
<property name="userDao" ref="userDao" />
3. 容器类型
1.array(list/set)
<property name="hobbys">
<array>
<value>Run</value>
</array>
</property>
2.map
<property name="countries">
<map>
<entry key="CN" value="China" />
<entry key="US" value="America" />
<entry key="KR" value="Korea" />
</map>
</property>
- property
<property name="files">
<props>
<prop key="first">One</prop>
<prop key="second">Two</prop>
<prop key="third">Three</prop>
</props>
</property>
构造注入
除标签名称有变化,其他均和Set注入一致
当没有空参构造器时
<constructor-arg name=" " value=" ">
<constructor-arg index=下标从0开始 value=" ">
自动注入
- 从目前的IOC容器中找到符合类型的bean:
autowire=“byType” - 有多个符合类型的bean时,不能用byType
autowire=“byName”
bean里的id=类里的属性名 - 注解版自动注入: