Spring框架Bean管理-注解

目录

一、什么是Bean管理

二、Bean管理操作的两种方式

三、基于注解的方式实现Bean管理和注入属性

1.什么是注解

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

3.用注解的方式创建对象

4.用注解的方实现属性注入

5. IOC纯注解的方式


一、什么是Bean管理

bean管理指的是如下的两个操作。

1.创建对象 2.注入属性

二、Bean管理操作的两种方式

1.基于xml配置文件的方式实现 2.基于注解方式实现

本篇我们讲解以注解方式来实现

三、基于注解的方式实现Bean管理和注入属性

1.什么是注解

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

②:使用注解,注解作用在类上面,方法上面,属性上边

③:使用注解的目的:简化XML配置

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

@Component 普通的类

@Controller 表现层

@Service 业务层

@Repository 持久层

3.用注解的方式创建对象

编写接口和实现类

package com.qcby.testanno;

public interface UserService {
    public void hello();
}

在需要管理的类上添加@Component注解

package com.qcby.testanno;

import org.springframework.stereotype.Controller;

/*  */
/**
 * 组件,作用:把当前类使用IOC容器进行管理,如果没有指定名称,默认使用类名,首字母是小写。
 * userServiceImpl。或者自己指定名称
 **/
//@Controller(value = "us")这样的话我们getbean就得根据这个了。
@Controller
public class UserServiceImpl implements UserService {

    @Override
    public void hello() {
        System.out.println("使用注解,方便吧!");
    }
}

编写配置文件,重点是开启注解扫描。



   
    
    

编写测试方法

package com.qcby.Test;


import com.qcby.testanno.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DemoTest2 {
    @Test
    public void run1(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("ApplicationContext.xml");
        UserService us = (UserService) ac.getBean("userServiceImpl");
        us.hello();
    }

    
}

4.用注解的方实现属性注入

@Value 用于注入普通类型(String,int,double等类型)

@Autowired 默认按类型进行自动装配(引用类型)

优先bytype后byname

一般来说使用前两个就够了

@Qualifier 不能单独使用必须和@Autowired一起使用,强制使用名称注入

@Resource Java提供的注解,也被支持。使用name属性,按名称注入

package com.qcby.testanno;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;



@Component(value = "car")
public class Car {
    // 注解注入值,属性set方法是可以省略不写的。
    // 只有一个属性,属性的名称是value,value是可以省略不写的
    @Value("宝马")
    private String carname;
    @Value(value = "160")
    private Double money;

    // 也不用提供set方法
    // 按类型自动装配的注解,和id名称没有关系
    @Autowired
    // 按id的名称注入,Qualifier不能单独使用,需要Autowired一起使用。
    // @Qualifier(value = "person")
    // @Resource Java提供的注解,按名称注入对象,属性名称是name
    //@Resource(name = "person")
    private Person person;

    @Override
    public String toString() {
        return "Car{" +
                "carname='" + carname + '\'' +
                ", money=" + money +
                ", person=" + person +
                '}';
    }
}
package com.qcby.testanno;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;

@Controller
//@Component(value = "person")
public class Person {
    @Value("张三")
    private String personname;

    @Override
    public String toString() {
        return "Person{" +
                "pname='" + personname + '\'' +
                '}';
    }
}
 @Test
    public void run2(){
        // 工厂
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取对象
        Car car = (Car) ac.getBean("car");
        System.out.println(car.toString());
    }

5. IOC纯注解的方式

纯注解的方式是微服务架构开发的主要方式,所以也是非常的重要。纯注解的目的是替换掉所有的配置文件。但是需要编写配置类。

常用的注解总结

@Configuration 声明是配置类

@ComponentScan 扫描具体包结构的

编写实体类 

package com.qcby.PureAnnotation;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class City {
    @Value("北京")
    private String address;
    @Override
    public String toString() {
        return "City{" +
                "address='" + address + '\'' +
                '}';
    }
}

编写配置类,替换掉applicationContext.xml配置文件

package com.qcby.PureAnnotation;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.ComponentScan;

@Configurable
@ComponentScan(value = "com.qcby")
public class SpringConfig {
}
package com.qcby.Test;

import com.qcby.PureAnnotation.City;
import com.qcby.PureAnnotation.SpringConfig;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class DemoTest3 {
    @Test
    public void run(){
        ApplicationContext ac=new AnnotationConfigApplicationContext(SpringConfig.class);

        City city = (City) ac.getBean("city");
        System.out.println(city.toString());
    }
}

Spring框架Bean管理-xml_何妨徐行的博客-CSDN博客

你可能感兴趣的:(spring,java,spring)