Spring知识点总结

软件设计六大原则

高内聚,低耦合

DI: Dependency Injection 依赖注入
IOC: Inversion of Control 控制反转

Spring的beans.xml文件
引入约束,解析XML的规定
<beans>标签的 xmlns xmlns:xsi xsi:schemaLocation属性
规定:
id和name都是用来表示给创建的对象取的名字
id是之前版本的写法,不可以使用特殊符号
name 可以使用一些特殊符号,所以现在基本都要name

<bean name="userDao" bean="对象的地址">
<bean name="userService" bean="对象的地址">

property标签是当前bean创建的对象里面的成员变量
name是成员变量的名,ref是另一个bean标签创建的对象的name名,
就是那个bean创建的对象

<property name="userDao" ref="指向的bean标签创建的对象 例如userDao"></property>
</bean>

通过构造方法注入
1 UserService 中提供对应的构造方法
2 beans.xml中进行设置

注入普通属性(非引用)
1 dao提供对应的变量
2 beans.xml进行配置
xml的<property> 标签
对象用ref指向,普通属性用value=“值” 设置
3 测试

xml中bean标签的属性
scope="" 属性值prototype非单例模式 默认是单例模式
autowire:自动装配
byName : 根据名字进行匹配
1 成员变量名字 ×
2 set方法名字 √
3 方法的参数列表名字 ×
byType: 根据set方法的参数列表类型进行注入,
如果beans.xml中出现了多个能匹配的对象时会出错

init-method:初始化对应的方法
destroy-method:销毁时对应的方法
init-method="" destroy-method=""

设置集合的值

1
//销毁spring容器
//对象中自定义的destroy方法,必须要销毁spring容器的时候才会执行,
//如果scope设置的是singleton 的时候 对象的声明周期才会和spring容器绑定,那么
//但是如果是prototype的时候,对象的声明周期不归spring管理,所以即使设置了destroy-method
ClassPathXmlApplicationContext对象的 destroy()方法,
//销毁并不是销毁对象 ,而是进行资源释放,所以,我们可以再销毁语句之后,继续使用userService对象

迟加载
默认情况下,在调用new ClassPathXmlApplicationContext(“beans.xml”);
的时候,会自动创建对象
迟加载: 用到的时候再创建lazy-init=“true” 这时候在getBean的时候才会创建对象,并init初始化
可以对beans标签设置 属性default-lazy-init=“true” 让所有bean都迟加载
如果beans和bean都有迟加载,并且一个是true,一个是false,bean的优先级高

注解注入 --Autowired
1 导包 spring-aop-4.2.1.RELEASE.jar
2 更改beans.xml
引入约束和配置
设置注解方式注入
xml文件中 <context:annotation-config />
类中 @Autowired 加在方法或者变量上 如果写在set方法上,就用set方法注入
如果写在变量上就用变量注入就不会调用方法
@Autowire 默认是byType: 根据set方法的参数列表类型进行注入,
如果beans.xml中出现了多个能匹配的对象时自动变为byName: 根据set方法参数列表变量名注入(这里跟非注解不一样)
@Autowire 手动改为byName:
在set方法的参数里写(@Qualifier(“找的xml里面的对象名”))
如果没找到报错, 那么设置@Autowire(required=false)就不会报错,控制台打印null
XML注入和注解注入可以同时存在,但是XML优先级高
3 更改需要注入的类

注解注入 --Resource (javax支持)
@Resource 默认是byName:先根据set方法名进行匹配,如果找不到,再根据参数变量名找
如果匹配不上 自动转换为byType
@Resource(name=“xxx”) 设置名字后,会按照设置的名字去找
@Resource相当于@Autowired和@Qualifier一起使用

注解实例化 --Compent
xml中:
扫描该包下的类,如果有实例化注解,就实例化

<context:component-scan base-package="包名,多个用逗号隔开" />

类中:
@Component
默认使用类名首字母小写作为key进行存储 值为当前类实例化对象
可以手动设置@Component(value=“xxx”) 指定名字 value= 可以省略
指定名字后,就把首字母小写名换为指定的名了
@Component相当于父类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值