@Component
把类加入容器中
@Autowired
1.将构造函数的参数装配到当前类的bean对象
2.将成员变量....
3.setter方法
4. 任意方法
@ComponentScan
扫描主键
@Configuration
当前的类是一个配置类
@RunWith(SpringJUnit4ClassRunner.class)
自动初始化spring上下文环境
@ContextConfiguration(classes = AppConfig.class)
自动读取配置文件
@Primary 当有多个实现类时,加在类文件上标记为首选bean
@Qualifier("normal")
限定符,当多个实现类时,在类定义和测试的上方都加入这个注解,就可以指定使用哪个实现类;
也可以使用 @Component("festival")指定id;
都不写的话默认id是类名的首字母小写。
@Controller 
controller层代替@Component
@Service
service层代替@Component
@Repository
dao层代替@Component
@Bean 在配置类中添加,实现java装配;spring应用程序启动时回自动调用被注解的方法
@Scope("prototype")
@Scope(scopeName ="prototype")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
定义bean的作用域
@PostConstruct, @PreDestory
对象的初始化和销毁
@RequestMapping
注解映射请求路径
@RequestAttribute
获取HTTP的请求(request)对象属性值,用来传递给控制器的参数。
一般在jsp页面设置 request.setAttribute("name", "baixue") ,在java文件中接收
@RequestParam
在后台接收参数,通常用于get请求,接收url中的参数
@RequestParam(name = "sort", required = false) String sort
@RequestBody
在后台接收参数,接收请求体中的参数
@PathVariable
功能类似于@RequestParam,@PathVariable int from
@Transactional 声明式事务管理
@SuppressWarnings
给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默
@PostConstruct
PostConstruct注解用于方法上,该方法在初始化的依赖注入操作之后被执行




项目自己封装的注解
@PRemote Dubbo的消费者上加这个注解
@PService Dubbo的服务者上加这个注解
@RegistryAPI
注册到Gateway上的注解



Autowired使用场景

//@Scope("prototype")
//@Scope(scopeName ="prototype")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

@Api注解可以不用写
@ApiOperation 注解可以不写

1. 用在构造函数上
package soundsystem;

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

@Component
public class CdPlayer {
    private CompactDisc cd;

    private Power power;

    public CdPlayer() {
        super();
        System.out.println("Cdplayer无参构造函数");
    }
    @Autowired
    public CdPlayer(CompactDisc cd, Power power) {
        this.cd = cd;
        this.power = power;
        System.out.println("Cdplayer的多参数构造函数" );
    }

    public void play(){
        power.supply();
        cd.play();
    }
}

2. 用在成员变量上
package soundsystem;

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

@Component
public class CdPlayer {
    @Autowired
    private CompactDisc cd;

    @Autowired
    private Power power;

    public CdPlayer() {
        super();
        System.out.println("Cdplayer无参构造函数");
    }


    public void play(){
        power.supply();
        cd.play();
    }

}
3.用在setter方法上
package soundsystem;

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

@Component
public class CdPlayer {
    private CompactDisc cd;

    private Power power;

    public CdPlayer() {
        super();
        System.out.println("Cdplayer无参构造函数");
    }

    @Autowired
    public void setCd(CompactDisc cd) {
        this.cd = cd;
        System.out.println("调用setCd");
    }

    @Autowired
    public void setPower(Power power) {
        this.power = power;
        System.out.println("调用setPower");
    }

    public void play(){
        power.supply();
        cd.play();
    }
}

4.用在任意方法上
package soundsystem;

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

@Component
public class CdPlayer {
    private CompactDisc cd;

    private Power power;

    public CdPlayer() {
        super();
        System.out.println("Cdplayer无参构造函数");
    }

    @Autowired
    public void prepare(CompactDisc cd,Power power){
        this.cd =cd;
        this.power = power;
        System.out.println("prepare方法的调用");
    }


    public void play(){
        power.supply();
        cd.play();
    }

}


Autowired的required属性

标识注入的对象是可选的(可能找不到)
package soundsystem;

import com.sun.org.apache.xpath.internal.functions.FuncFalse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class CdPlayer {
    @Autowired(required = false)
    private CompactDisc cd;

    @Autowired
    private Power power;

    public CdPlayer() {
        super();
        System.out.println("Cdplayer无参构造函数");
    }


    public void play(){
        power.supply();
        if(cd != null){
            cd.play();
        }
    }

}

设置组件扫描的基础包

@ComponentScan默认只能扫描当前包及其子包的组件,无法扫描其他包

可以扫描其他包 :
@ComponentScan("包名") @ComponentScan(basePackages = {"包名1","包名2"})
@ComponentScan(basePackageClasses = {UserController.class, UserService.class, UserDao.class})