启用注解功能:

    1. 在配置文件中配置
    2. <context:component-scan base-package="com.example" />
    • 说明:
      • 在进行包所扫描时,会对配置的包及其子包中所有文件进行扫描
      • 扫描过程是以文件夹递归的形式进行的
      • 扫描过程仅读取合法的java文件
      • 扫描时仅读取spring可以识别的注解
      • 扫描结束后会将识别的有效注解转化为srping对应的资源加入Ioc容器
    • 注意:
      • 无论是注解格式还是XML配置格式,最终都是将资源加载到Ioc容器中,差别仅仅是数据读取方式不同
      • 从加载效率上来说注解优于XML配置文件

    Bean的定义

    • 名称:@Component @Controller @Service @Repository
    • 类型:类注解
    • 位置:类定义上方
    • 作用:设置该类为spring管理的bean
    • 规范

      1. @Component
      2. public class ClassName{}
    • 说明:

      • @Component、@Service、@Repository是@Component的衍生注解,功能同@Component
    • 相关属性:
      1. - value(默认):定义bean的访问id

    Bean的作用域

    • 名称:@Scope
    • 类型:类注解
    • 位置:类定义上方
    • 作用:设置该类作用bean对应的scope属性
    • 范例

      1. @Scope
      2. public class ClassName{}
    • 相关属性

      • value(默认):定义bean的作用域,默认为singleton

    Bean的生命周期

    • 名称:@PostConstruct、@PreDestroy
    • 类型:方法注解
    • 位置:方法定义上方
    • 作用:设置该类作用bean对应的生命周期方法
    • 范例
      1. @PostConstruct
      2. public void init(){ System.sout.pringln("init...");}

    加载第三方资源:

    • 名称:@Bean
    • 类型:方法注解
    • 位置:方法定义上方
    • 作用:设置该方法的返回值作用srping管理的bean
    • 范例

      1. @Bean("dataSource")
      2. public DruidDataSource createDataSource() { return ...; }
    • 说明

      • 因为第三方bean无法在其源码上进行修改,使用@Bean解决第三方bean的引入问题
      • 该注解用于替代XML配置中的静态工厂与实例工厂创建bean,不区分方式是否为静态或非静态
      • @Bean所在的类必须被spring扫描加载,否则该注解无法生效
    • 相关属性:
      • value(默认):定义bean的访问id

    —————————————————————————————————————————————————————————————
    bean的非引用类型属性注入

    • 名称:@Value
    • 类型:属性注解、方法注解
    • 位置:属性定义上方、方法定义上方
    • 作用:设置对应属性的值或对方法进行传参
    • 范例

      1. @Value"${jdbc.username}"
      2. private String username;
    • 说明:

      • value值仅支持非引用类型数据,赋值时对方法的所有参数全部赋值
      • value值仅支持读取properties文件中的属性值,通过类属性将properties中数据传入类中
      • value值支持SpEL
      • @value注解如果添加在属性上方,可以省略set方法(set方法的目的是为属性赋值)
    • 相关属性:
      • value(默认):定义对应属性值或参数值

    bean的引用类型属性注入

    • 名称:@Autowired、@Qualifier
    • 类型:属性注解、方法注解
    • 位置:属性定义上方、方法定义上方
    • 作用:设置对应属性的对象或对方法进行引用类型传参
    • 范例

      1. @Autowired(required = false)
      2. @Qualifier("userDao")
      3. private UserDao userDao;
    • 说明:

      • @Autowired默认按类型装配,指定@Qualifier后可以指定自动装配的bean的id
    • 相关属性:
      • required:定义属性是否允许为null

    @Autowired如果按类型匹配遇到两个相同类型则按Id别名匹配

    如果没起Id别名,默认匹配名为其类名:UserDaoImpl
    @Primary:设置执行优先级,只能设置一个,设置多个冲突

    1. @Component
    2. @Primary
    3. public class UserDaoImpl implements UserDao{
    4. public void .....
    5. }

    加载Properties文件

    • 名称:@PropertySource
    • 类型:类注解
    • 位置:类的上方
    • 作用:加载properties文件中的属性值
    • 范例:

      1. @PropertySourcevalue = "classpath:filename.properties"
      2. public class ClassName {
      3. @Value("${propertiesAttributeName}")
      4. private String attributeName;
      5. }
    • 说明:

      • 不支持*统配格式,一旦加载,所有spring控制的bean中均可使用对应属性值
    • 相关属性:
      • value(默认):设置加载的properties文件名
      • ignoreResourceNotFound:如果资源未找到,是否忽略,默认为false

    纯注解格式:

    • 名称:@Configuration、@ComponentScan
    • 类型:类注解
    • 位置:类定义上方
    • 作用:设置当前类为spring核心配置加载类
    • 范例:

      1. @Configuration
      2. @ComponentScan("scanPackageName")
      3. public class SpringConfigClassName{}
    • 说明:

      • 核心配置类用于替换spring核心配置文件,此类可以设置为空,不设置变量与属性
      • bean扫描工作使用注解@ComponentScan替代
    • 注:
    • 读取配置文件修改为:AnnotationConfigApplicationContext

    第三方bean配置与管理:

    • 名称:@Import
    • 类型:类注解
    • 位置:类定义上方
    • 作用:导入第三方bean作为spring控制的资源
    • 范例:

      1. @Configuration
      2. @ComponentScan("com.example")
      3. @Import(JDBCConfig.class)
      4. public class SpringConfig {
      5. }
    • 说明:

      • @Import注解在同一个类上,仅允许添加一次,如果需要导入多个,使用数组的形式进行设定
      • 被导入的类中科院继续使用@Import导入其他资源(了解)
      • @Bean所在的类科院使用导入的形式进入spring容器,无需声明为bean

    —————————————————————————————————————————————————————————————
    依赖加载:

    • 名称:@DependsOn
    • 类型:类注解、方法注解
    • 位置:bean定义的位置(类上或方法上)
    • 作用:控制bean的加载顺序,是其在指定bean加载完毕后再加载
    • 范例

      1. @DependsOn("beanId")
      2. public class ClassName{}
    • 说明:

      • 配置在方法上:使@DependsOn指定的bean优先于@Bean配置的bean进行加载
      • 配置在类上:使@DependsOn指定的bean优先于当前类中所有@Bean配置的bean进行加载
      • 配置在类上:使@DependsOn指定的bean优先于@Component等配置的bean进行加载
    • 相关属性:
      • value(默认):设置当前bean所依赖的bean的id
    • 名称:@Order
    • 类型:配制类注解
    • 位置:配制类定义的位置(类上)
    • 范例
      1. @Order(1)
      2. public class SpringConfigClassName{}

    —————————————————————————————————————————————————————————————
    延迟加载:

    • 名称:@Lazy
    • 类型:类注解、方法注解
    • 位置:bean定义的位置(类上或方法上)
    • 作用:控制bean的加载时间,时期延迟加载
      1. @Lazy
      2. public class ClassName{}