IOC操作Bean管理(基于注解方式)

  1. 什么是注解?

    (1)注解是代码特殊标记,格式: @注解名称(属性名称=属性值)

    (2)使用注解,注解作用在类上面 方法上面 属性上面

    (3)目的: 为了简化xml配置

  2. Spring针对Bean管理中创建对象提供注解Bean管理(创建对象)

    (1)@Component

    (2)@Service 业务层

    (3)@Controller 表现层

    (4)@Repository 持久层

    • 上面四个注解功能是一样的 都可以用来创建bean实例
  3. 基于注解创建对象

    • 引入依赖

      spring-aop-5.2.6.RELEASE.jar

    • 开启组件扫描

      image-20210302214354623

    • 使用注解

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      //在注解里面value属性值可以省略不写,
      //默认值是类名称,首字母小写
      //UserService -- userService
      //@Component(value = "userService") //<bean id="userService" class=".."/>
      @Service
      public class UserService {
      @Value(value = "abc")
      private String name;
      //定义dao类型属性
      //不需要添加set方法
      //添加注入属性注解
      // @Autowired //根据类型进行注入
      // @Qualifier(value = "userDaoImpl1") //根据名称进行注入
      // private UserDao userDao;

      //@Resource //根据类型进行注入
      @Resource(name = "userDaoImpl1") //根据名称进行注入
      private UserDao userDao;

      public void add() {
      System.out.println("service add......."+name);
      userDao.add();
      }
      }

      image-20210302222149143

  4. 基于注解方式实现属性注入(集合类型只能通过xml)

    (1)@Autowired: 根据属性类型自动装配

    • 把service和dao对象创建,在service和dao类添加创建对象注解

    • 把service注入dao对象,在service类添加属性,在属性上面使用注解

    • set方法不是必须的

    (2)@Qualifier:根据属性名称进行注入

    • 需要和@Autowired一起使用

    (3)@Resource: 可以根据类型注入 可以根据名称注入

    • @Resource(name=’’’’)

    (4)@Value:注入普通类型属性

  5. 完全注解开发

    1
    2
    3
    4
    5
    @Configuration  //作为配置类,替代xml配置文件
    @ComponentScan(basePackages = {"com.atguigu"})
    public class SpringConfig {

    }

    测试代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Test
    public void testService2() {
    //加载配置类
    ApplicationContext context
    = new AnnotationConfigApplicationContext(SpringConfig.class);
    UserService userService = context.getBean("userService", UserService.class);
    System.out.println(userService);
    userService.add();
    }

用于改变作用范围的

作用和在bean标签中使用scope标签实现的功能一样

@Scope

**作用:**用于指定bean的作用范围

属性:value:用于指定范围的取值: singleton prototype 默认单例

和生命周期相关的(了解)

作用就和在bean 标签中适用init-method 和destroy-method的作用一样

@PreDestroy

用于指定销毁方法

@PostConstruct

用于指定初始化方法