个人学习笔记
spring@注解
使用注解之前要开启自动扫描功能
其中base-package为需要扫描的包(含子包)
<context:component-scan base-package=“cn.test”/>
@Configuration
把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解
作用域
@Lazy(true)
表示延迟初始化
@ComponentScan
用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件找那个的
@Bean
该注解只用用在方法上,表明使用此方法创建一个对象,并且放入spring容器中
//指定当前类是一个配置类
@Configuration
//用于指定spring在初始化容器时需要扫描的包
@ComponentScan("com.dynamic_transaction_anno")
//导入其他配置类
@Import({JdbcConfig.class,TransactionConfig.class})
//开启spring注解事务的支持
@EnableTransactionManagement
public class SpringConfig {
@Bean("jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DataSource ds){
return new JdbcTemplate(ds);
}
@Bean("dataSource")
public DataSource createDataSource(){
DriverManagerDataSource dr=new DriverManagerDataSource();
dr.setDriverClassName("com.mysql.jdbc.Driver");//com.mysql.jdbc.Driver
dr.setUrl("jdbc:mysql//localhost:330b/eesy");
dr.setUsername("root");
dr.setPassword("root");
return dr;
}
@Controller
用于标注控制层组件
@Service
用于标注业务层组件
@Repository
用于标注持久层(数据访问组件),即DAO组件。
@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
把资源让spring来管理。相当于xml中配置一个bean。value:指定bean的id,如果不指定value属性,默认bean的id是当前类的类名。首字母小写
@Scope
用于指定scope作用域的(用在类上)
@PostConstruct
用于指定初始化方法(用在方法上)
@PreDestory
用于指定销毁方法(用在方法上)
@Resource
默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@DependsOn
定义Bean初始化及销毁时的顺序
@Autowired
默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用
自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时。使用要注入的对象变量名称作为bean的id,在spring容器中查找,找到了注入成功,找不到就报错。
@Primary和@Autowired @Qualifier(“xxx”)
有如下一个接口
public interface Singer {
String sing(String lyrics);
}
当有两个或者多个实现类的时候
@Component // 加注解,让spring识别
public class MetalSinger implements Singer{
@Override
public String sing(String lyrics) {
return "I am singing with DIO voice: "+lyrics;
}
}
@Component
public class OperaSinger implements Singer {
@Override
public String sing(String lyrics) {
return "I am singing in Bocelli voice: "+lyrics;
}
}
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常。(只对接口的多个实现生效)
@Primary
@Component
public class OperaSinger implements Singer{
@Override
public String sing(String lyrics) {
return "I am singing in Bocelli voice: "+lyrics;
}
}
或者使用@Autowired @Qualifier(“xxx”)
将上面的两个实现类改为如下:
@Component
@Qualifier("metalSinger")
public class MetalSinger implements Singer{
@Override
public String sing(String lyrics) {
return "I am singing with DIO voice: "+lyrics;
}
}
@Component
@Qualifier("opreaSinger")
public class OperaSinger implements Singer {
@Override
public String sing(String lyrics) {
return "I am singing in Bocelli voice: "+lyrics;
}
}
调用
@Component
public class SingerService {
private static final Logger logger = LoggerFactory.getLogger(SingerService.class);
@Autowired
private Singer singer;
@Qualifier("opreaSinger")
public String sing(){
return singer.sing("song lyrics");
}
}
Swagger注解
@Api
修饰整个类,描述Controller的作用
@ApiOperation
描述一个类的一个方法,或者说一个接口
@ApiParam
单个参数描述
@ApiModel
用对象来接收参数
@ApiModel(description = “响应对象”)
@ApiProperty
用对象接收参数时,描述对象的一个字段
@ApiModelProperty(value = “响应码”, name = “code”, required = true, example = )
@ApiResponse
HTTP响应其中1个描述
@ApiResponses
HTTP响应整体描述
@ApiIgnore
使用该注解忽略这个API