Spring整理_01
1.导包
spring-webmvc
spring-jdbc
2.优点
- Spring是一个开源的免费的框架(容器)
- spring是一个轻量级、非入侵式的框架
- 控制反转(IOC),面向切面编程(AOP)(两个是重点,理解好了就问题不大)
- 支持对事务的处理
3.IOC理论推导(控制反转)
- 控制反转是一种设计思想,DI是实现IOC的一种方式
- 控制反转是一种通过描述(XML或注解)通过第三方去产生或获取特定的对象的方法
- 在spring中实现控制反转的是IOC容器,其实现方法是依赖注入
4.spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userDao" class="com.jiabowen.dao.UserDaoImpl"></bean> </beans>
5.IOC创建对象的三种方式
- 下标赋值
- 通过类型赋值
- 参数名直接赋值
总结:在配置文件加载的时候,容器中的对象就已经被初始化了
6.spring配置
6.1别名
<alias name="user" alias="userNew"/>
6.2Bean配置
- id:bean的唯一表示符(对象名)
- class:bean对象的全限定名
- name:也是别名,而且可以起多个别名
- 。。。
6.3import:
多用于团队开发,将多个配置文件合并成一个(springmvc中会用到)
7.依赖注入
7.1构造器注入
7.2构造器注入,依赖注入[重点]
- 依赖注入:set注入
- 依赖:bean对象的创建依赖于容器
- 注入:bean对象中的所有属性,由容器来注入
<bean id="student" class="com.jiabowen.pojo.Student"> <property name="name" value="张三"></property> <property name="address" ref="address"></property> <property name="id" value="123456"></property> </bean> <bean id="address" class="com.jiabowen.pojo.Address"> <property name="addressId" value="321654"></property> <property name="addressname" value="张三张三"></property> </bean>
7.3其他方式注入
p:参数
c:构造器
注意:p命名空间和c命名空间不能直接使用,需要导入xml约束
7.4bean的五种作用域
- singleton:单例(Spring默认机制)
- prototype:原型模式(每次从容器中get都会得到一个新的对象)
- 其余的request,session,application这些只能在web开发中使用
8.bean的自动装配
- 自动装配是spring满足bean依赖的一种方式
- spring会在上下文中自动寻找,并自动给bean装配属性
spring中有三种装配的方式
- 在xml中显示配置、
- 在java中显示的配置
- 隐式自动装配bean【重要】
8.1、ByName自动装配
ByName:会自动在容器上下文中查找,和自己set方法后面的值对应的bean ID
8.2、ByType自动装配
小结:
-
-
bytype:bean的class唯一,并且这个bean需要和自动注入的属性类型一致
8.3、使用注解实现自动装配!!!
jdk1.5支持注解,spring2.0支持注解
要使用注解须知
1.导入约束:context约束
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd "> <context:annotation-config/> </beans>
2.配置注解支持
<context:annotation-config/>
8.4、@Autowired
直接在属性上使用即可!也可以在set方法上使用
科普:@Nullable 字段标记了这个注解,说明这个字段可以为null
public People(@Nullable String name){ this.name = name; }
部分源码
public @interface Autowired{ boolean required() default true; }
如果显示定义了autowired属性为false,说明这个对象可以为null
public class People{ @Autowired(required = false) private Cat cat; }
对于@Autowired,如果有多个类型相同的对象,可以和@Qualifier(value = Xxxx)配合使用
8.5、@Resource
单独使用,如果多个bean类型相同,使用name属性:@Resource(name = "Xxx")
小结:
两种注解的区别:
-
都是用来自动装配的,都可以放在属性字段上,
-
autowired通过byType的方式实现,而且必需要求这个对象存在
-
resource默认通过byname方式实现,如果找不到名字,则通过byType实现!如果两个都找不到就报错
-
执行顺序不同:@autowired通过byType的方式实现,@resource默认通过byname的方式实现
9.使用注解开发
在spring4之后,要使用注解开发,必须要保证aop的包导入了
-
-
属性如何注入:可以放在属性上,也可以放在set方法上
-
衍生注解
-
@Repository bean
-
@Service service
-
@Controller controller
这四个注解的功能都是一样的,都是代表将某个类注册到Spring中,装配Bean
-
-
自动装配
三个注解,上面有
-
作用域
@Scope("singleton")//单例
@Scope("prototype")//原型模式
6.小结
- xml与注解
- xml更加万能,适用于各种任何场合,维护简单,方便
- 注解,不是自己的类是用不了,维护相对复杂
- xml与注解的最佳实践:
- xml用来管理bean
- 注解只负责完成属性的注入
- 在使用的过程中只需要注意一个问题:必须让注解生效
<!--指定要扫描的包--> <context:component-scan base-package="com.zhangsanzhangsan.pojo"></context:component-scan> <!--开启注解支持--> <context:annotation-config/>

浙公网安备 33010602011771号