1、@Configuration -----------告诉spring这是一个配置类-----类注解
2、@Bean-----------给容器中注册一个bean
@Bean | bean的id默认为方法名 |
@Bean(initMethod="init",destroyMethod="destroy") | bean创建销毁指定调用函数----数据源配置就可以用这个配置 |
bean创建 | *单实例:在容器启动的时候创建对象 * 多实例:在每次获取的时候创建对象 |
bean销毁: | * 单实例:容器关闭的时候 * 多实例:容器不会管理这个bean;容器不会调用销毁方法; |
3、@Scope(value="prototype") ----------作用域设置
* prototype | 多实例(ioc容器启动不会创建实例,每次获取每次都会创建实例) |
* singleton | 单实例(默认值,ioc容器一启动就会创建实例,以后每次拿就是从容器中直接获取) |
* request | 同一次请求创建一个实例 |
*session | 同一个session创建一个实例 |
4、@ComponentScan----------自动扫描
@ComponentScan(value="com.montnets") | value:指定要扫描的包 |
@ComponentScan(value="com.montnets",excludeFilters= { @Filter(type=FilterType.ANNOTATION)} ) | excludeFilters:指定不扫描 includeFilters:只扫描指定的(@ComponentScan要禁用默认扫描所有useDefaultFilters=false) useDefaultFilters=false: 关闭默认扫描所有包 |
<!--自动包扫描 那么只要配置了@controller @service @repository @component 就会自动加载到容器中 --> <context:component-scan base-package="com.montnets"></context:component-scan> | 配置文件配置---自动扫描包 |
5、@ComponentScans ------------放多个@ComponentScan
@ComponentScans( @ComponentScan(value="com.montnets",includeFilters= { @Filter(type=FilterType.ANNOTATION,classes= {Controller.class})}, useDefaultFilters=false) ) |
|
6、@Filter(type=FilterType.ANNOTATION,classes=Controller.class)----------指定排除规则
type=FilterType.ANNOTATION,classes={Controller.class} | 过滤注解类型 所有标有@controlle注解的 |
type=FilterType.ASSIGNABLE_TYPE,classes= {BookService.class} | 过滤类类型 BookService类 |
type=FilterType.ASPECTJ | ASPECTJ表达式 |
type=FilterType.REGEX | 过正则表达式 |
type=FilterType.CUSTOM,classes= {MyTypeFilter.class} | 自定义过滤: 写个实现TypeFilter接口的实现类
|
@Filter使用实例参考:https://blog.youkuaiyun.com/qq_39769369/article/details/84977211
7、@Controller-----controller类标识注解 ---不给值默认是类名首字母小写
8、@Service-----service类标识注解
9、@Repository ---DAO类表示注解
10、@Lazy ------懒加载
1、针对单实例bean:默认Scope为singleton |
2、容器启动不创建对象,第一次使用(获取)创建bean实例,并初始化 |
11、@Conditional({WindowsCondition.class})-----按条件注册bean
@Conditional | 放在类上,满足条件这个配置类中所有bean注册才能生效 |
@Conditional | 放在方法上,满足条件方法中注册的bean才生效 |
WindowsCondition | 实现Condition接口 |
@Conditional使用实例参考:https://blog.youkuaiyun.com/qq_39769369/article/details/84977211
12、@Import -----快速导入组件
第一种用法 | @Import(Color.class)------导入单个组件 @Import({Color.class,Red.class})-----导入多个组件 | bean的id默认是该类的全类名 |
第二种用法 | @Import({MyImportSelector.class}) @Import({Color.class,Red.class,MyImportSelector.class}) | MyImportSelector实现ImportSelector接口 |
第三种用法 | @Import({MyImportBeanDefinitionRegistrar.class}) @Import({Red.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class}) | MyImportBeanDefinitionRegistrar实现ImportBeanDefinitionRegistrar接口 |
13、@Value------赋值
@Value("张三") | 基本数值 |
@Value("#{25-5}") | 可以写SpEL; #{} |
@Value("${person.phone}") | 可以写${};取出配置文件【properties】中的值(最终保存在运行环境变量里面的值) properties配置文件要被读取 |
14、@PropertySource----------读取外部配置文件
@PropertySource(value= {"classpath:person.properties"}) | 使用${key}拿到对应的value值 |
15、@Autowired-------自动注入
默认优先按照类型去容器中找对应的组件 | applicationContext.getBean(BookDao.class) |
如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找 | applicationContext.getBean("bookDao") |
@Autowired(required=false) | 自动装配配置为非必须,没找到也不会报错 |
| @Autowired标注在方法上:
|
| @Autowired标注在构造器上:
|
| @Autowired标注参数位置:
|
@Autowired使用实例参考:https://blog.youkuaiyun.com/qq_39769369/article/details/84977211
学习中不定时更新