spring学习笔记_IOC反向控制部分

开发步骤:

  • 导包
  • 写实现类
  • 创建applicationContext.xml
  • 配置bean
  • 加载配置文件运行

Bean标签

  • id,getBean时的唯一标识
  • class,全类名
  • scope,singleton(单例随容器创建销毁),prototype(getBean时创建,GC机制来销毁),还有三个取值暂不看
  • init-method,对象创建时执行对象的某个方法
  • destroy-method,对象销毁时执行对象的某个方法

Bean对象的三种创建方式

  • 无参构造,最常用,需要一个无参构造方法
  • 工厂静态,class属性配置工厂的全类名,factory-method配置工厂的静态方法,getBean得到的是该方法返回的对象
  • 工厂实例,首先为工厂配置一个bean标签,然后配置一个想要对象的bean标签该标签不配置class属性,配置factory属性,值为工厂标签的id值,并配置factory-method为工厂返回对象的普通方法

依赖注入

体现的一种方式就是controll层、service层、dao层中的体现。dao和service的实现类都交给ioc管理,service通过getBean获取dao,controll通过getBean获取service,controll只需要service这样就算是硬编码,依赖注入直接把dao注入到service中,不需要在从service中硬性获取,降低耦合性。
在service中声明一个dao对象,然后写它的set方法,在xml文件中service的bean标签声明一个子标签property,name取值规则是(setUserDao,那么name的值为userDao),ref属性为userDao的bean标签的id值

p-命名空间注入(了解即可)

property的一种简单实现。
直接给bean添加属性,如果注入的是对象,p:userDao-ref=“userDao的id”。

依赖注入的类型

  • 引用数据
  • 普通数据
  • 集合数据

基本配置图

在这里插入图片描述

Spring的API

ApplicationContext

在这里插入图片描述

  • ClassPathXmlApplicationContext,从类的根路径下加载配置文件
  • FileSystemXmlApplicationContext,从磁盘路径上加载配置文件
  • AnnotationConfigApplicationContext,使用注解配置容器对象时,需要用它来创建spring容器,它用来读取注解

getBean方法使用
一种通过id获取,另一种通过Class文件类型获取。
如果容器中存在多个bean的class类型一致,那么第二种方式会报错。
在这里插入图片描述

Spring的properties文件引入

将beans的命名空间复制一份,把其中的beans全都改成context即可,引入如下,使用${key}
在这里插入图片描述

Spring原始注解

1-4是bean标签配置简化,5-8是依赖注入,9是scope,10是initmethod,11是destorymethod
注解的使用需要使用组件扫描,在applicationContext.xml中配置

//组件扫描的作用是告诉Spring在相应包下找注解并根据注解创建对象等工作
<context:component-scan base-package="基本包名" />

在这里插入图片描述

Component	表示该组件用于Spring生成一个bean	->Component:组件
		@Component("user")

Controller	表示该控制器用于Spring生成一个bean
		@Controller("user")

Service		表示该业务逻辑类用于Spring生成一个bean
		@Service("user")

Repository	表示该Dao类用于Spring生成一个bean ->repository:贮藏室 数据封装基地
		@Resipotory("user")

Autowired	表示自动封装该属性,或者字段(可以省略set方法,根据字段Field即可,如果该字段是一个Bean,将通过Spring容器中查找该类型的Bean对象,用于封装该注解字段),
		@Autowired 根据该注解指定的字段,查询Spring容器中对应的bean对象,分配给当前类作为成员.
		Autowired默认是根据类型依赖注入.ByType,如果Autowired注解的是一个字段,并不能完整的体现面向对象的思想,最好是注解在set方法上.

Qualifier	表示根据提供的修饰语 @Qualifier('xxx') -> 匹配该xxx属性,若要使用该注解,必须配合AutoWire一起使用,而Autowire可以单独使用
		@Autowire @Qualifier("user") 封装user注解的bean为本类对象的成员,根据名称注入 ByName,设置在字段上. @Qualifier常常使用在参数的赋值上
		如: String getUsername(@Qualifier("user")User user){}

Resource	是Aotuwire注解和Qualifier注解的结合体.@Resource("user"),标注为user的bean
		@Resource("user") 封装user注解的bean为奔雷对象的成员 == @Autowire @Qualifier
		默认根据名称依赖注入,默认Resource() = Resource like Resource(name = "XXX")  	->体现面向对象思想应该设置在字段上
		可以手动设置为根据类型注入Resource(type = User.class) 				->体现面向对象思想应该设置在set方法上

Value		@Value("xxx");为修饰的字段赋值;通常配合SpEL(Spring Expression Language)使用
		@Value("${jdbc.url}") private String url; 为url赋值	 -> (Spring中引入的properties后缀文件中的jdbc.url对应的值) 
									->或者{PropertySrouce注解中的jdbc.url值}
	
Scope		常用 : 	@Scope("singleton") 声明从spring容器获得的该类的bean有且只有一个(单例模式)
			@Scope("prototype") 声明从spring容器获得的该类的bean有多个(标准Bean模式)

PostConstruct	注解使用在用户定义的初始化方法前,声明该方法是该类的初始化方法@PostConstruct :意为执行在构造方法后,构造方法创建对象,对象调用该初始化方法

PreDestroy	注解使用在用户自定义的结束方法前,声明该方法是该类的结束方法,当前对象被销毁前调用该方法@PreDestroy ;Spring容器被销毁的时候,执行.

Order		注入对象引用的集合的时候使用:@Order(1) @Order(2) 表示该类生成的bean将会存储在某个List<该类型>中,并按照顺序插入List
		如果是Map<String,T> 那么order的顺序没有任何关系,但是该Map必须定义为<String,T> String接收对应对象的id值(id唯一 -> key唯一);
		此处的List和Map可以通过@Autowired或@Resource注入;
		for example -> UserDao -> UserDaoImpl1(@Repository("userDao1")  @Order(2)) 	and 	UserDaoImpl2(@Repository("userDao2")  @Order(1))
		(@Resource)private List<UserDao> list; 	->	list.get(0) ->userDao2 		 list.get(1) -> userDao1
		(@Autowired)private Map<String,UserDao> map;  ->	map{第一个("userDao1" = userDao1), 第二(个"userDao2" = userDao2)}

https://www.cnblogs.com/xiaoxi/p/5935009.html 理解spring注解特别好的一篇博客,建议浏览

Spring新注解

产生原因:原始注解无法满足完全替换xml的需求
在这里插入图片描述常针对以下标签使用:
在这里插入图片描述Spring新注解的使用示例:
https://www.cnblogs.com/xuweiweiwoaini/p/11728996.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值