@Autowired
自动装配,其作用是为了消除代码里面的getter/setter与bean中的property。当Spring发现 @Autowired 注解时,将自动在代码上下文中找到匹配的bean,并自动注入到相应的地方去。当Spring找不到bean时会抛出异常,将 @Autowired 注解的required属性设置为 false 不会抛出异常,会显示null
public class HelloDemo{
@Autowired
private UserService userService;
@Autowired
public void setUserService(UserService userService){
this.userService = userService;
}
}
@Component
在类定义之前添加@Component注解,它会被spring容器识别,并转化为一个bean对象
@Component
public class Demo{
@Autowired
private UserService userService
}
@Repository
持久层、对Dao层实现类进行注解
UserDao.java
public interface UserDao{
void insert();
}
UserDaoImpl.java
@Repository
public class UserDaoImpl implements UserDao{ //这里表示将UserDao类声明为bean
public void insert(){
System.out.println("调用UserDao方法");
}
}
@Service
用于对业务逻辑层进行注解,标注业务层
UserService.java
public interface UserService{
void add();
}
UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService{
public void add(){
System.out.println("调用了UserService方法");
}
}
@Controller
用于控制层注解,不能用于方法上,只能用于类上,表示该类是一个控制器
@Controller
public class HelloWorld{
@RequestMapping(value="/index")
public String index() {
return "index";
}
}
@RequestMapping
用于处理请求地址的映射,可以作用于类和方法上
- value:定义request请求是映射地址
- method:定义request的请求方法,这些方法包括【GET, POST, PUT,DELETE】默认接受GET请求,如果请求方式和定义的方式不一样则请求无法成功
- params:定义request请求中必须包含参数值
- headers:定义request请求中必须包含某些指定的请求头
- consumes:定义请求提交内容的类型
- produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
@RequestMapping("index/login")
public String send(){
return "login"
}
@RequestMapping(method = RequestMethod.POST) //只接受POST方法传过来的值
public String dispaly(){
return "login"
}
@RequestParam
用于获取传入的参数值
- value:参数名称
- required:定义该传入参数是否必须,默认为true,和@RequestMapping的params属性有点相似
@Controller
public class Demo{
@RequestMapping("/index")
public String execute(String username, @RequestParam(value="pwd", required=false)String password) {
System.out.println("Hello SpringMVC");
System.out.println(username);
System.out.println(password);
return "index";
}
}
@Resource
默认通过byname的形式来直接通过反射的机制加入机制的,这个和我们前面的@Qualifier在功能上是一致的,当然我们也可以采用type的参数来进行注入,这个就和 @Autowired 功能上一致了,习惯上 @Resource 我们更会把其放在get set方法上。而前面的 @Autowired 则放在字段上更多一些,这也符合Spring和反射机制对面向对象的要求。
public class Demo{
@Resource(name="userDao")
private UserDao userDao; //注入字段上
@Resource(name="userDao")
public void setUserDao(UserDao userDao){ //用于属性setter方法上
this.userDao = userDao;
}
}