spring常用注解

spring注解

spring认为所有的组件,都应该放在spring容器中,组件通过容器进行自动装配

  1. spring最基本的写法
    <bean id="myspring" class="com.spring.Person">
        <property name="age" value="10"></property>
        <property name="name" value="zhangsan"></property>
    </bean>
    1.加上classpath:前缀(这个时候xml要放在当前目录也就是src下)
    ApplicationContext ctx=new  FileSystemXmlApplicationContext("classpath:applicationContext.xml");
    2.加上file:把路径写全(用这个方法xml可以放任意地方)
    ApplicationContext ctx=new  ClassPathXmlApplicationContext("ApplicationContext ctx=new  	
    	ClassPathXmlApplicationContext("file:F:/workspace/SpringExercis/src/applicationContext.xml");
    
    

2.使用注解的方式
```java

@Configuration//告诉Spring,这是一个配置类
public class MainConfig {
@Bean //给容器注入一个bean,类型为返回值的类型,id,默认使用方法名作为id,bean可以指定value属性
public Person person(){
    return new Person("lisi",20);
}
}

 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    Person person = applicationContext.getBean(Person.class);
    System.out.println(person);

3.componentScan(value=“com.spring”) 注解
原始写法:配置文件中加入

<!--只要标注 了@Controller,@Service,@Repository,@Component ,会被自动扫描,加入到容器-->
<context:component-scan base-package="com.spring"></context:component-scan>

注解写法:


@Configuration//告诉Spring,这是一个配置类
@ComponentScan(value = "com.spring" ,excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION ,classes = {
                Controller.class
        } )
})
public class MainConfig {
public class MainConfig { 

componentScan 也可以配置如下方法(点击ComponentScan)

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    @AliasFor("basePackages")
    String[] value() default {};
    @AliasFor("value")
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;
//ASSIGNABLE_TYPE 指定包含的类型,包括子类,实现类
    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;

    String resourcePattern() default "**/*.class";

    boolean useDefaultFilters() default true;//使用exclude时需设置为false

    ComponentScan.Filter[] includeFilters() default {};

    ComponentScan.Filter[] excludeFilters() default {};

java8 componentScan 支持重复注解,如果不是java8,则可以使用ComponentScans,同时支持自定义的扫描规则
3.@Scope -设置组件的作用域
ion 容器,默认是单实例对象
@Scope(“singleton”)
IOC容器启动会创建对象放到容器中,以后每次获取,直接从容器获取

@Scope(“prototype”)//多实例对像,每次获取,才会调用
4.@Lazy-懒加载注解
懒加载针对于单实例对象,默认在容器启动的时候创建对象
@Lazy 添加后,容器启动,不创建对象,在第一次获取对象的时候创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值