Spring常用注解

ioc(inversion of control 控制反转):把对象的创建、赋值、管理工作都交给代码之外的容器实现,也就是对象的创建都是有其他外部资源完成。 控制:创建对象,对象的属性赋值,对象之间的关系管理。

反转:把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现,由容器代替开发人员管理对象、创建对象、给对象赋值。

正转:由开发人员在代码中,使用new构造方法创建对象,开发人员主动管理对象。

容器:是一个服务器软件,一个框架(spring)。

ioc的体现:和servlet原理一样

1:创建类继承HttpServlet

2:在web.xml中注册servlet,使用

<servlet-name>myservlet</servlet-name>
<servlet-class>com.fd.controller.MyServlet</servlet-class>

3:没有创建Servlet对象,没有使用MyServlet myservlet=new MyServlet();

4:Servlet是Tomcat服务器,它能帮你创建对象。Tomcat也称为容器。Tomcat作为容器,里面存放的有Servlet对象,Filter、Listener对象。 ioc的技术实现:DI(Dependency injection)依赖注入是ioc的技术实现。使用者只需要在程序中提供要使用的对象名称就行,至于赋值、查找,都可以交由容器内部实现。

注入就是给属性赋值

spring是使用的DI实现了ioc的功能,spring底层创建对象,使用的是反射机制。

 

1.1 @RequestMapping

通过RequestMapping注解可以定义不同的处理器映射规则。

1 url路径映射 @RequestMapping(value="/item")或@RequestMapping("/item)@RequestMapping("/user.action") 访问路径 类似servle 的那个

value的值是数组,可以将多个url映射到同一个方法

2.1.1 窄化请求映射

在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理。

如下:

@RequestMapping放在类名上边,设置请求前缀

@RequestMapping("/book")

 

常用的注解如下:

@Qualifier 指定名字 和@Autowired 指定类型 自动装配**一般配合使用**

@Resource 用法与@Autowired 用法相似,也是做依赖注入的,从容器中自动获取bean。但还是有一定的区别。

在启动spring的时候,首先要启动容器; 启动spring容器时,会默认寻找容器扫描范围内的可加载bean,然后查找哪些bean上的属性和方法上有@Resource注解; 找到@Resource注解后,判断@Resource注解括号中的name属性是否为空,如果为空:看spring容器中的bean的id与@Resource要注解的那个变量属性名是否相同,如相同,匹配成功;如果不相同,看spring容器中bean的id对应的类型是否与@Resource要注解的那个变量属性对应的类型是否相等,若相等,匹配成功,若不相等,匹配失败。 如果@Resource注解括号中的name属性不为空,看name的属性值和容器中的bean的id名是否相等,如相等,则匹配成功;如不相等,则匹配失败。

@component(泛指组件): (把普通pojo实例化到spring容器中,相当于配置文件中的 ) 泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

@repository(数据访问组件) (实现dao访问)用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件 //Repository注解作用: 让spring去创建这个接口的动态代理类

@service (业务层组件)(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理,生成spring的bean,这个类的初始化交给spring,这个类就会有spring去创建,去实例化,管理,这个类就放在spring容器里边

@controller(控制层组件)(注入服务)用于标注控制层,相当于struts中的action层 spring的后端控制器

@Resource(引用属性组件):没有参数时,首先按照name自动注入,如果没有匹配的,在按照类型注入,如果有参数时,比如name,如果没有匹配的,就抛异常

@Scope(指定Bean的作用域)

@param mybatis的注解

   @Select("select * from user where username=#{uname} and password=#{pwd}")
    public User login(@Param("uname") String username, @Param("pwd") String password);
​

采用#{}的方式把@Param注解括号内的参数进行引用(括号内参数对应的是形参如 uname对应的是username);uname会取username的值,在赋值给sql语句里的uname

@controllerAdvice注解详细解释

这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:

1.全局异常处理;

2.全局数据绑定

3.全局数据预处理

@ExceptionHandler 注解用来指明异常的处理类型,即如果这里指定为 NullpointerException,则数组越界异常就不会进到这个方法中来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值