文章目录
SSM框架使用注解前的声明
1.开启注解支持
<context:annotation-config/>
作用:
- 进行注解驱动注册,从而使注解生效
- 用于激活那些已经在spring容器里注册过的bean上面的注解,也就是显示的向Spring注册
- 如果不扫描包,就需要手动配置bean
- 如果不加注解驱动,则注入的值为null!
2.配置扫描包
使用过程中, 可以不用扫描,扫描是为了类上的注解
<context:component-scan base-package="com.cao.pojo"/>
装配类
@Component相关(结合扫描包实现类的自动装配)
举例:
@Component //将这个类标注为Spring的一个组件,放到容器中!
public class Dog {
public String name = "dog";
}
功能:这四个注解功能相同,都是为了将使用注解的类交给Spring管理装配
为了替换在xml文件中显式注册bean
<bean id="cat" class="com.cao.pojo.Cat"/>
<bean id="dog" class="com.cao.pojo.Dog"/>
<bean id="people" class="com.cao.pojo.People"/>
区别:只是为了更好的分层
@Component
@Controller:web层
@Service:service层
@Repository:dao层
lombok(实现相关函数不用写)
功能:
使用:
@Data
@AllArgsConstructor
@NoArgsConstructor
装配Bean
使用注解装配Bean有两种方法:
- @Autowired
- @Resource
1、@Autowired与@Resource都可以用来装配bean。都可以写在字段上,或写在setter方法上。
2、@Autowired默认按类型装配(属于spring规范),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用
3、@Resource(属于J2EE规范),默认按名称装配,名称可以通过name属性进行指定。如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。
@Autowired(替换set方法)
功能:替换set方法,按照类型自动转配
@Autowired结合@Qualifier实现byName自动装配
@Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配
@Qualifier不能单独使用。
举例:
<bean id="dog1" class="com.kuang.pojo.Dog"/>
<bean id="dog2" class="com.kuang.pojo.Dog"/>
<bean id="cat1" class="com.kuang.pojo.Cat"/>
<bean id="cat2" class="com.kuang.pojo.Cat"/>
没有加Qualifier时测试,直接报错
@Autowired
@Qualifier(value = "cat2")
private Cat cat;
@Autowired
@Qualifier(value = "dog2")
private Dog dog;
测试成功
@Resource
- @Resource如有指定的name属性,先按该属性进行byName方式查找装配;
- 其次再进行默认的byName方式进行装配;
- 如果以上都不成功,则按byType的方式自动装配。
- 都不成功,则报异常。
实体类:
public class User {
//如果允许对象为null,设置required = false,默认为true
@Resource(name = "cat2")
private Cat cat;
@Resource
private Dog dog;
private String str;
}
beans.xml
<bean id="dog" class="com.kuang.pojo.Dog"/>
<bean id="cat1" class="com.kuang.pojo.Cat"/>
<bean id="cat2" class="com.kuang.pojo.Cat"/>
<bean id="user" class="com.kuang.pojo.User"/>
测试:结果OK
配置文件2:beans.xml , 删掉cat2
<bean id="dog" class="com.kuang.pojo.Dog"/>
<bean id="cat1" class="com.kuang.pojo.Cat"/>
实体类上只保留注解
@Resource
private Cat cat;
@Resource
private Dog dog;
结果:OK
结论:先进行byName查找,失败;再进行byType查找,成功。
SpringBoot常用注解
@PathVariable(从URI模板里面填充)
@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充
@RequestParam
http://localhost:8080/hello/101?param1=10¶m2=20
@RequestMapping("/hello/{id}")
public String aaa(@PathVariable(value="id") String id,
@RequestParam(value="param1") String param1,
@RequestParam(value="param2") String param2){
//......
}