这几天学ssm,发现太多了,决定总结一下注解的用法
Mybatis
Spring
一、自动装配:
首先在xml文件中需要引入注解支持
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
<context:annotation-config/>
1.@Autowired 按照类型进行自动装配(ByType)
需要导入的包:spring-aop
个人的理解:
1.首先需要在spring-config.xml中注册要自动装配的类
<bean id="dog" class="com.kuang.pojo.Dog"/>
<bean id="cat" class="com.kuang.pojo.Cat"/>
<bean id="user" class="com.kuang.pojo.User"/>
2.然后在需要装配的私有字段,set方法上添加该注解,即可实现自动装配
public class User {
@Autowired
private Cat cat;
@Autowired
private Dog dog;
}
注意:1.该注解可以在没有Set方法的情况下对字段进行注入
2.字段名可以和注册的名字不一致,因为是按类型匹配
2.@Qualifier 在@Autowired上加上该注解,可以在有多个同类型注册的情况下选择使用哪一个
个人的理解:
1.与@Autowired配对使用,而且是用的时候需要赋值:@Qualifier(value="bean中注册的名字")
<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"/>
@Autowired
@Qualifier(value = "cat2")
private Cat cat;
@Autowired
@Qualifier(value = "dog2")
private Dog dog;
注意:1.只能和Autowired配对使用
二、自动配置Bean
需要引入注解支持
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
指定注解扫描com.kuang.pojo包下的注解
<context:component-scan base-package="com.kuang.pojo"/>
3.@Component 将被这个注解标注的类注册到bean中
个人理解:1.三步走,引入注解支持,指定被扫描的包,在该包下需要注册bean的类上标注
2.Component中需要传入参数,传入的参数即为bean中所注册的id
@Component("user")
// 相当于配置文件中 <bean id="user" class="当前注解的类"/>
public class User {
public String name = "秦疆";
}
注意:1.不要忘了指定生效
4.@Controller:web层 与@Component等效,只不过用在不同层
5.@Service:service层 与@Component等效,只不过用在不同层
6.@Repository:dao层 与@Component等效,只不过用在不同层
7.@Value 可以在不用set方法的情况下对字段的值进行注入
个人理解:1.首先Value中需要传入值,用于给注解的字段进行赋值
@Component("user")
// 相当于配置文件中 <bean id="user" class="当前注解的类"/>
public class User {
@Value("秦疆")
// 相当于配置文件中 <property name="name" value="秦疆"/>
public String name;
}
三、基于Java类进行配置
有了这个注解就可以不用再配置spring-config.xml文件了
1.@Configuration 标注在类上,代表这个类是一个配置类
2.@Bean 与@Configuration配对使用,在类中的方法上使用,代表注册这个类中的方法到bean中
@Configuration //代表这是一个配置类
public class MyConfig {
@Bean //通过方法注册一个bean,这里的返回值就Bean的类型,方法名就是bean的id!
public Dog dog(){
return new Dog();
}
}
注意:被标注@Bean的方法,方法的返回值就是bean的类型,方法名就是bean的id
开启注解支持<context:annotation-config>和指定注解扫描包<context:component-scan>的区别
前者是针对已经在xml中配置注册过的bean生效,后者是指定拿个地方的注解能自动配置bean
@Bean和@Component的区别
网上大体搜了一下概念,看下来感觉就是@Bean比@Component要更加灵活,因为一个类通过@Component只能注册一个bean,而@Bean可以通过创建多个方法来创建不同的bean,可能是这么一回事吧?
SpringMVC
1.@Controller和@RequestMapping
首先要声明在那个包下可以生效
<context:component-scan base-package="com.kuang.controller"/>
@Controller在类上标注,自动注册到Spring中
@RequestMapping在标注@Controller的类中的方法上标注,设置这个类的返回值为String
@RequestMapping("此处填写的地址为程序运行后,输入那个网址可以运行这段程序")
@Controller
public class ControllerTest2{
//映射访问路径
@RequestMapping("/t2")
public String index(Model model){
//Spring MVC会自动实例化一个Model对象用于向视图中传值
model.addAttribute("msg", "ControllerTest2");
//返回视图位置
return "test";
}
}
注意:@RestController和@Controller的区别
@Controller下的方法是通过视图解析器跳转到html页面上的
@RestController return的就是字符串(类似于@ResponseBody)
2.@GetMapping和@PostMapping等
以get和post方法请求,get可以通过输入网址直接访问,post需要进行跳转
3.@RestController和@ResponseBody
@RestController是标注在类上的,使这个类的视图解析器都失效,String直接返回字符串而不是导向某个地址
@ResponseBody是标注在方法上的,使这个方法的视图解析器失效,String直接返回字符串而不是某个地址
4.@RequestParam
取别名
用法,在方法的形参前面署名,表示这是一个从前端传递来的参数@RequestParam(“目标名字”)
最好每个从前端获取的数据上都加上这个注解,代表这是一个从前端请求的数据
5.@PathVariable
在url中添加变量
如图所示,将url上拼接上id的值