spring 基于注解 IOC

注释 : XML和注解配置IOC,在配置形式上不同,但是解决的问题是一样的,都是用于解耦。

一 , 注解一共分类四类( 在使用相关注解的时候,在配置配置创建容器要扫描的包
注解形式 创建容器扫描的包
<context:component-scan base-package=“com.qyy”></context:component-scan>
)

			(1) 用于创建对象的:
				相当于XML配置的 <bean id = "" class= ""></bean>		
				@Component (value="")-- 作用 :用于把当前类的对象存入容器  
				属性value用于指定获取bean对象时的id,当不指定时,默认是当前类名,首字母小写	
					作用于 : 表现层 , 业务层 ,持久层  
					注释 :  由此注解衍生出三个注解
				@Controller  ( 表现层)  @Service( 业务层)  @Repository ( 持久层 )
					(他们是Spring框架提供的更强语义化的注解,可让开发者通过注解就知道是那一层的类)
				---------------------------------------------------------------------------		
			(2) 用于注入数据的:
								相当于XML配置的, 构造函数注入与set方法注入
								<property name = "" value = ""  //   ref = "" ></property>
								
				@Autowired   作用  : 自动按照类型注入。如果找不到匹配的类型,则会报错(报什么错是看required属性)。如果只有唯一的一个类型匹配,则注入成功。
 *                              如果有多个匹配时,还会使用变量名称作为bean的id,在匹配的类型对象列表中,根据id获取,如果能找到依然可以注入成功。
 * ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426214349220.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE4MzQ5Ng==,size_16,color_FFFFFF,t_70)

								属性 : 是否必须注入成功,默认值是true 表示必须注入成功;通常情况下都是默认值
 									 使用注解注入时,set方法和构造函数就不是必须有的了
			------------------------------------------------------------------------------------------------------------------------------
				@Qualifier("XX2")   -- ( 在自动按照类型注入的基础之上,在按照Bean的id注入)
										属性  value  用于指定bean的id  
				@Resource(name= "")   直接按照bean id注入   
										属性  用于指定其他bean的id
				@Qualifier("XX2")  与  @Autowired 再给类成员注入时,不能独立使用,

				
				@Value 作用 :
				
				 用于指定基本类型或者String类型的数据。它通常的作用都是用于读取properties文件中的配置
 *               需要借助spring的el表达式。写法:${
    
    key}   读取的就是properties文件的value
									   @Value("${jdbc.driver}")  ---- jdbc.driver=com.mysql.jdbc.driver
 		    				    	   private String driver;
				主要作用 : 用于读取property文件中的配置
				
			
			(3) 用于改变作用范围的:
									相当于XML配置的      bean标签的Scope 
										<bean id="" class=""  scope="prototype" ></bean>-->
				@Scope (
				 作用 :  用于指定当前bean的作用范围
				 属性 : value 用于指定指定作用范围的值  -- 取值和XML配置时一摸一样)
				@Scope("singleton")  单例           打印结果 : true 
				@Scope("prototype")  多例 	        打印结果 : false
				// 根据bean的 id 获取对象
		        IUserService userServie = ac.getBean("userService", IUserService.class);
		        IUserService userServie2 = ac.getBean("userService", IUserService.class);
		        System.out.println(userServie ==userServie2);
		        
			(4) 和生命周期相关的:
				@PostConstruct(
 *             作用:用于指定初始化方法)
 *      		@PreDestroy(
 *              作用:用于指定销毁方法)
									相当于XML配置的:  init-method 和  destory-method 属性
				
			@Bean 		把当前对象的返回值放入Spring容器当中,
								属性 name 用于指定bean的id,默认值是当前的方法名, 它和value属性是一样的,互为别名
			
			@ComponentScan  
								作用 : 用于指定要扫描的包			
								属性 value用于指定扫描的包,和basePackages的作用相同
		    @Configuration   作用 表明当前类是spring的一个配置类
					            如果该类作为字节码参数传递给了AnnotationConfigApplicationContext则不用写

             @Import(JdbcConfig.class)   作用导入其他的包 , 主配置导入从配置包,从配置不需要写任何的注解
             												属性:用于指定导入类的字节码(从配置文件)
             @@PropertySource("classpath:jdbc.properties")用于指定properties文件的位置
             							属性 : 用于指定properties文件的位置

猜你喜欢

转载自blog.csdn.net/weixin_43183496/article/details/105770430