史上最强大的Spring注解(未完 待续)

注解;

首先我们要明白 为什么要写注解?
注解是什么? 有什么作用?
今天就让我们带着问题去找答案吧!

首先在我们去搭建spring的环境时,需要去新建一个xml的配置文件 ,里面有一个 管理bean的标签,因为spring框架的特性,所有的bean都是由spring容器来专门管理
所以我们如果书写了一个 bean的话 ,就需要在xml配置文件中配一个bean的容器来专门管理bean
例如这样:

package com.shsxt.service;

public class HelloService {
public void hello(){
System.out.println("hello spring");
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-
xmlns 即 xml namespace xml 使用的命名空间
xmlns:xsi 即 xml schema instance xml 遵守的具体规范
xsi:schemaLocation 本文档 xml 遵守的规范 官方指定
-->
<bean id="helloService"  class="com.shsxt.service.HelloService"></bean> 

就像这样建立一个helloService的类 我们就需要在配置文件中创建一个管理bean的Ioc容器(最后一行)

但是 试想我们平时做项目会建立很多bean ,如果一个个自己手写的话 那还不得累死,所以在很多的因素之下.spring这时候同样提供了扫描的方式,对扫描到的bean对象统一进行管理, 简化开发配置,提高开发效率。

具体的实现步骤:

包扫描
<context:component-scan base-package="com.shsxt"/>

同时对于被spring 管理的bean 类的定义上需要加入对应的注解定义
开发中建议(开发中的一种约定)
@Repository (数据访问层 即dao组件类)
@Service (标记一个业务逻辑组件类 需要注入dao)
@Controller (标记一个业务组件类 需要注入Service)
@Component(由Component注释的bean 也会被spring管理)
@Component可以代替@Repository、@Service、@Controller
如果对于开发的类实在不明确到底属于哪个层,可以使用@Component注解定义。

@Resource和@Autowired :自动装配bean(实现对bean的注入) 均可标注在字段或属性的setter方法上。

自动装配就是让Spring自动满足bean依赖的一种方法,在满足依赖的过程中,会在Spring中寻找匹配某个bean需求的其他bean。

@Autowired: 属于spring的注释
在Springorg.springframework.beans.factory.annotation包下,可用于为类的属性、构造器、方法进行注值

@Resource: 不属于spring的注释
是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上

注入方式:
@Autowired: 默认按照类型(ByType 即bean的类型)自动装配,默认情况下要求依赖对象必须存在,
如果允许null值,可以设置它required属性为false。
如果我们想使用按名称装配,可以结合@Qualifier注解一起使用
@Qualifier: 对依赖注入的条件进行限制

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.beans.factory.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;//默认是true  不允许null存在
}

@Controller

public class CustomerController r {

    @Autowired                     //默认依赖的对象必须存在( Customer)
    //@Autowired(required = false) 改变默认方式为false 可以存在null
    //@Qualifier("CService")       对依赖注入进行限制  按照名称装配
    private CustomerService customerService;

   @Controller
   public class HappyController {
 
   }
    

@Resource:默认按Name(bean的名字)自动注入,也提供按照Type(bean的类型)注入;
(@Resource 使用比较灵活,既可以指定名字 也可以指定类型,同时属于java的 减少了耦合度 推荐使用)

@RequestMapping: 将url映射到整个处理类或者特定的处理请求的方法
在类前面定义,则将url和类绑定。
在方法前面定义,则将url和类的方法绑定

@RequestMapping中可以使用 method 属性标记其所接受的方法类型,
如果不指定方法类型的话,可以使用 HTTP GET/POST 方法请求数据,
但是一旦指定方法类型,就只能使用该类型获取数据。

@Controller
@RequestMapping("customer")
public class CustomerController extends BaseController {

    @Autowired
    private CustomerService customerService;

    @RequestMapping("index")
    public String index(){
        return "customer";
    }

    }
    //路径:customer/index    
 @RequestMapping(value="/inedx",method=RequestMethod.GET)
 public String index(){
        return "customer"  //只能通过get 请求   路径: customer/index    
    }

@RequestParam :将请求的参数绑定到方法上,默认情况下 参数必须传,但是通过设置requried=false的话,参数可以不传

 @RequestMapping(value="/inedx",method=RequestMethod.GET)
 public String index(
  @RequestParam(defaultValue="10",name="age")int ag
  @RequestParam(defaultValue="1",name="flag")boolean flag,
  @RequestParam(defaultValue="100",name="s")double s )){
        return "customer"  //只能通过get 请求   路径: customer/index    
    }


 @RequestMapping(value="/inedx",method=RequestMethod.GET)
 public String index(
  @RequestParam(value = "name", required = false) String name,
  @RequestParam(value = "age", required = true) int age) {
  //age参数必须传 ,name可传可不传
  
  }

@PathVariable : 该注解用于 @RequestMapping里,会将修饰的方法参数变为可供使用的uri变量从而达到动态绑定

 @RequestMapping(value="/inedx/{index}",method=RequestMethod.GET)
 public String index(@PathVariable String index) {  
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值