Spring-基于纯注解方式的使用 2021-09-15

Spring的基础和应用系列文章目录

第一部分 Spring 基础
1.1 XML使用-IoC配置与依赖(DI)配置
1.2 基于注解和XML混合方式的使用
1.3 基于纯注解方式的使用
1.4 AOP 介绍
1.5 Spring 整合AspectJ的AOP使用

第二部分 组件支持
2.1 Spring 整合Junit
2.2 Spring 事务支持


一、如何能实现纯注解方式

1.1 注解扫描配置(能不能去掉)

<!-- 开启注解并扫描指定包中带有注解的类 -->
<context:component-scan base-package="com.kkb.spring.service"/>
<context:property-placeholder src=""></context:property-placeholder>

1.2 非自定义的Bean配置如何创建

比如:SqlSessionFactory和BasicDataSource配置,第三方代码不可修改代码。无Component相关注解。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" value="dataSource"></property>
</bean>
1

1.3 去掉XML后,如何创建ApplicationContext

之前创建ApplicationContext都是通过读取XML文件进行创建的。

ApplicationContext context = new ClassPathXmlApplicationContext(“beans.xml”);

二、常用注解

2.1 @Configuration

  • 相当于spring的XML配置文件。
  • 从Spring3.0开始可以使用@Configuration定义配置类,可替换xml配置文件。
  • 配置类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext 或 AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义对象,初始化Spring容器。
    value:用于指定配置类的字节码

2.2 @Bean

  1. 相当于标签
  2. 作用为:注册bean对象,主要用来配置非自定义的bean,比如DruidDataSource、 SqlSessionFactory
  3. @Bean标注在方法上(返回某个实例的方法)
  • 属性
    name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)。如果不指定,默认与标注的方法名相
    同。

@Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;

2.3 @ComponentScan

  1. 相当于context:component-scan标签
  2. 组件扫描器,扫描@Component、@Controller、@Service、@Repository注解的类。
  3. 该注解是编写在类上面的,一般配合@Configuration注解一起使用。
  • 属性
    basePackages:用于指定要扫描的包。
    value:和basePackages作用一样。
	@ComponentScan(basePackages="com.kkb.spring.service")
    @Configuration
    public class SpringConfiguration {
        //spring容器初始化时,会调用配置类的无参构造函数
        public SpringConfiguration(){
            System.out.println(“容器启动初始化。。。”);
        }
        @Bean
        @Scope(“prototype”)
        public SqlSessionFactory userService(){
            SqlSessionFactory sqlSessionFactory = new DefaultSqlSessionFactory();
            sqlSessionFactory.setxxx();
            return sqlSessionFactory;
        }
        @Bean
        @Scope(“prototype”)
        public SqlSessionFactory userService(){
            SqlSessionFactory sqlSessionFactory = new DefaultSqlSessionFactory();
            sqlSessionFactory.setxxx();
            return sqlSessionFactory;
        }
    }

2.4 @PropertySource

  1. 相当于context:property-placeholder标签
  2. 编写在类上面,作用是加载properties配置文件
  • 属性
    value[]:用于指定properties文件路径,如果在类路径下,需要写上classpath

当系统中有多个配置类时怎么办呢?想一想之前使用XML配置的时候是如何解决该问题的。

2.5 @Import

  1. 相当于spring配置文件中的标签
  2. 用来组合多个配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题。
  • 属性
    value:用来指定其他配置类的字节码文件
    @Configuration
    @ComponentScan(basePackages = "com.abcd.spring")
    @Import({JdbcConfig.class})
    public class SpringConfiguration {
    }

    @Configuration
    @PropertySource("classpath:jdbc.properties")
    public class JdbcConfig {
    }

2.6 创建纯注解方式上下文容器

  • Java应用
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
UserService service = context.getBean(UserService.class);
service.saveUser();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值