其他注解
其他注解
@Scope
基于注解改变bean的范围
作用:等同于在
<bean>
标签中使用scope
属性属性:
singletond : 单例的(default)
1)在容器启动完成之前就已经创建好对象,保存在容器中
2)任何获取都是获取之前创建好的对象
prototype : 多例的
1)容器启动默认不会去创建多实例bean
2)获取时去创建这个bean
3)每次获取都会创建一个对象
request : 作用于 web 应用的请求范围。WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.
session : 作用于 web 应用的会话范围。WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.
global-session : 作用于集群的会话范围(全局会话范围),当不是集群范围时,它就是 session
gloabl-session 示意图:
init-method:指定类中的初始化方法名称。
destroy-method:指定类中销毁方法名称。
总结:
当bean是单实例,并且没有设置懒加载 (opens new window)时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,而不用再创建新的bean了。
若bean是单实例,并且使用@Lazy注解设置了懒加载,则Spring容器启动时,不会立即实例化bean,自然就不会将bean注册到IOC (opens new window)容器中了,只有第一次获取bean的时候,才会实例化bean,并且将bean注册到IOC容器中。
若bean是多实例,则Spring容器启动时,不会实例化bean,也不会将bean注册到IOC容器中,只是在以后每次从IOC容器中获取bean的时候,都会创建一个新的bean返回。
全局session
和生命周期相关
作用:等同于在<bean>
标签中使用 init-method
和 destroy-method
==
@PreDestory
==作用:用于指定销毁方法
==
@Postcontrust
==作用:用于指定初始化方法
测试类:
public static void main(String[] args) { //1.获取核心容器对象 ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); //2.根据id获取Bean对象 IAccountService as = (IAccountService)ac.getBean("accountService"); as.saveAccount(); } }
1
2
3
4
5
6
7
8
9
@Configuration
- 作用:指定当前类是一个配置类
细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。
@ComponentScan
凡是在指定的包或其子包中的类上标注了@Repository、@Service、@Controller、@Component
注解的类都会被扫描到,并将这个类注入到Spring容器中。
- 作用:用于通过注解指定spring在创建容器时要扫描的包
属性:
value:它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。
我们使用此注解就等同于在xml中配置了:
<context:component-scan base-package="com.itheima"></context:component-scan>
1
includeFilters()方法指定Spring扫描的时候按照什么规则只需要包含哪些组件【方法的返回值都是Filter[]数组】
当我们使用includeFilters()方法来指定只包含哪些注解标注的类时,需要禁用掉默认的过滤规则。
@ComponentScan(value="com.meimeixia", includeFilters={ /* * type:指定你要排除的规则,是按照注解进行排除,还是按照给定的类型进行排除,还是按照正则表达式进行排除,等等 * classes:我们需要Spring在扫描时,只包含@Controller注解标注的类 */ @Filter(type=FilterType.ANNOTATION, classes={Controller.class}) }, useDefaultFilters=false) // value指定要扫描的包
1
2
3
4
5
6
7
8excludeFilters()方法指定Spring扫描的时候按照什么规则排除哪些组件。【方法的返回值都是Filter[]数组】
@ComponentScan(value="cn.edu.buaa", excludeFilters={ /* * type:指定你要排除的规则,是按照注解进行排除,还是按照给定的类型进行排除,还是按照正则表达式进行排除,等等 * classes:除了@Controller和@Service标注的组件之外,IOC容器中剩下的组件我都要,即相当于是我要排除@Controller和@Service这俩注解标注的组件。 */ @Filter(type=FilterType.ANNOTATION, classes={Controller.class, Service.class}) }) // value指定要扫描的包
1
2
3
4
5
6
7
@Bean
- 作用:用于把当前方法的返回值作为bean对象存入spring的ioc容器中
属性: * name:用于指定bean的id。当不写时,默认值是当前方法的名称
细节: * 当我们使用注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象。 * 查找的方式和Autowired注解的作用是一样的
@Import
- 属性:
value:用于指定其他配置类的字节码。
当我们使用Import的注解之后,有Import注解的类就父配置类,而导入的都是子配置类
@PropertySource
作用:用于指定properties文件的位置
属性: * value:指定文件的名称和路径。 * 关键字:classpath,表示类路径下
@Runwith
使用Junit提供的一个注解把原有的main方法替换了,替换成spring提供的
@ContextConfiguration
告知spring的运行器,spring和ioc创建是基于xml还是注解的,并且说明位置
locations:指定xml文件的位置,加上classpath关键字,表示在类路径下
classes:指定注解类所在地位置
@Conditional
按照一定的条件进行判断,满足条件向容器中注册bean,不满足条件就不向容器中注册bean。可以添加到类上,也可以添加到方法上。
XML与注解对比
