Spring入门教程-注解开发

Spring入门教程-注解开发

## 注解到底是什么?

注解:注解只不过是一个标记,存储了少量的内容信息,具体功能是由具体的框架实现.注解启动时使用注解的形式替代xml配置,将繁杂的spring配置文件从工程中彻底消除掉,简化书写.

程序运行流程

  1. 加载配置文件
  2. 添加bean到容器中
    1. 解析bean标签
    2. 解析相关注解
    3. @Bean
  3. bean加载完成即可运行业务程序

启动注解功能,加载类中配置的注解项

<context:component-scan base-package="packageName"/>

spring配置bean的方式

  1. 配置文件方式 bean标签配置

  2. 注解配置,加载类上(注意只写注解不会生效,一定需要扫描对应的包

    1. 类注解:@Component、@Controller、@Service、@Repository(“userDao”)
      • 注入bean,写在类上面将一个类的实列加入spring容器
      • value(默认):定义bean的访问id
    2. 类注解:@Scope(value默认单例)
      • singleton单例
      • prototype多例
    3. 方法注解,限定bean的生命周期:@PostContructor、@PreDestory
  3. 加载第三方资源

    名称:@bean

    类型:方法注解

    @Component
    public class JdbcConfig {
        @Bean("dataSource")
        public DataSource getDataSource() {
            DataSource dataSource = new DruidDataSource();
            return dataSource;
        }
    }
    
  4. bean的非引用类型属性注入

    名称:@Value

    类型:属性注解、方法注解

    @Value("${jdbc.username}")
    private String username;
    
  5. bean的引用类型属性注入

    名称:@Autowired、@Qualifier

    类型:属性注解、方法注解。

    说明:@Autowired默认按类型装配,指定@Qualifier后可以指定自动装配的bean的id

    @Autowired(required = false)
    @Qualifier("userDao")
    private UserDao userDao;
    

    名称:@Primary

    类型:类注解

    说明: @Autowired默认按类型装配,当出现相同类型的bean,使用@Primary提高按类型自动装配的优先级,多个@Primary 会导致优先级设置无效

    @Primary
    public class ClassName{}
    

    名称:@Inject、@Named、@Resource

    说明:

    ​ ◆ @Inject与@Named是JSR330规范中的注解,功能与@Autowired和@Qualifier完全相同,适用于不同架构场景

     	◆ @Resource是JSR250规范中的注解,可以简化书写格式,
    

    相关属性

    1. name:设置注入的bean的id
      2. type:设置注入的bean的类型,接收的参数为Class类型
  6. 加载properties文件

    名称:@PropertySource

    类型:类注解

    说明:

    ◆ 不支持*通配格式,一旦加载,所有spring控制的bean中均可使用对应属性值

    ◆ value(默认):设置加载的properties文件名

    ◆ ignoreResourceNotFound:如果资源未找到,是否忽略,默认为false

    @PropertySource(value = "classpath:filename.properties")
    public class ClassName {
    @Value("${propertiesAttributeName}")
        private String attributeName;
    }
    

使用配置类替换配置文件(纯注解格式)

  • 类注解

    • @Configuration
    • @ComponentScn
  • 具体使用

    • 创建配置类

      @Configuration //标记当前类是一个配置类
      @ComponentScan("com")
      public class EntryConfiguration {
      }
      
  • 修改容器实现类

      public class DemoAnnotation {
          public static void main(String[] args) {
              ApplicationContext ctx = new AnnotationConfigApplicationContext(EntryConfiguration.class);
      
              UserService bean = ctx.getBean(UserService.class);
              System.out.println(bean);
          }
      }
    
  • 第三方bean配置与管理

    名称:@Import

    类型:类注解

    @Configuration
    @Import(OtherClassName.class)
    public class ClassName {}
    

    说明:

  • import注解直接写一个class名就可以直接注入一个bean到spring容器中

  • @Import注解在同一个类上,仅允许添加一次,如果需要导入多个,使用数组的形式进行设定

  • 在被导入的类中可以继续使用@Import导入其他资源(了解)

  • @Bean所在的类可以使用导入的形式进入spring容器,无需声明为bean

依赖加载

  1. 名称:@Import

    类型:类注解、方法注解

    @DependsOn("beanId")
    public class ClassName {
    }
    

    说明:

    ​ ◆ 配置在方法上,使@DependsOn指定的bean优先于@Bean配置的bean进行加载

    ​ ◆ 配置在类上,使@DependsOn指定的bean优先于当前类中所有@Bean配置的bean进行加载

    ​ ◆ 配置在类上,使@DependsOn指定的bean优先于@Component等配置的bean进行加载

    相关属性

    ​ ◆ value(默认):设置当前bean所依赖的bean的id

  2. @Lazy, 延迟加载

    名称:@Lazy

    类型:类注解、方法注解

    @Lazy
    public class ClassName {
    }
    
  3. @Order, 有多个配置类的时候可以指定顺序

    名称:@Order

    类型:配置类注解

    @Order(1)
    public class SpringConfigClassName {
    }
    

spring整合mybatis从0开始

分析
  • 业务类使用注解形式声明bean,属性采用注解注入
  • 建立独立的配置管理类,分类管理外部资源,根据功能进行分类,并提供对应的方法获取bean
  • 使用注解形式启动bean扫描,加载所有注解配置的资源(bean)
  • 使用AnnotationConfigApplicationContext对象加载所有的启动配置类,内部使用导入方式进行关联
步骤
  1. 修改mybatis外部配置文件格式为注解格式
  2. 业务类使用@Component声明bean,使用@Autowired注入对象
  3. 建立配置文件JDBCConfig与MyBatisConfig类,并将其导入到核心配置类SpringConfig
  4. 开启注解扫描
  5. 使用AnnotationConfigApplicationContext对象加载配置项

注解整合Junit

  • 导入Spring整合Junit坐标

    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.1.9.RELEASE</version>
    </dependency>
    
  • Spring整合Junit测试用例注解格式

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = SpringConfig.class)
    public class UserServiceTest {
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值