注解 开发

注解开发

以前我们都是写配置文件.xml 来实现属性和对象的创建与注入
现在 我们用注解的形式 就能免去写.xml配置文件 这繁琐的事了
做法——创建个maven工程——引入spring依赖(spring context)创建一个配置类 来代替xml配置文件

比如 现在创建了一个包叫config
在包里创建了一个类 叫Config
在Config类的上面加上注解
@Configuration //告诉Spring 这是一个配置类
再加上注解
@ComponentScan(value = “com.mumu”)
表示扫描com.mumu 下的所有包

//配置类 == 配置文件
@Configuration  //告诉Spring 这是一个配置类
@ComponentScan(value = "com.mumu")
public class Config {

 @Bean//给容器中注册一个Bean;这个方法 的意思就是 给这个容器返回一个对象
 public Mybean mybean(){

        return new Mybean();
    }
}

@Bean//给容器中注册一个Bean;这个方法 的意思就是 给这个容器返回一个对象

问:既然@ComponentScan(value = “com.mumu”)是扫描这个目录下的所有包 那我有写包不想被你扫 又刚好在这个目录下呢?

答:在@ComponentScan(value = “com.mumu”,形参)补形参 用到的时候百度一下看看怎么用


//配置类 == 配置文件
@Configuration  //告诉Spring 这是一个配置类
@ComponentScans(value = @ComponentScan(value = "com.mumu",excludeFilters = {
       @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Service.class)
        
        //这个注解的意思是 我会扫描com.mumu这个包  但是 我会排除@Service这个注解下的东西
        //excludeFilters  排除
        //FilterType.ANNOTATION 根据类型 去筛选
}))
                
public class Config {

    @Bean//给容器中注册一个Bean;这个方法 的意思就是 给这个容器返回一个对象
    public Mybean mybean(){

        return new Mybean();
    }
}

来介绍@Scope注解
介绍之前 要先来了解一下它里面的属性 单实例(singleton)和多实例(prototype)

singleton: 单实例的意思就 当 IOC容器启动的时候就会调用方法创建对象,以后每次获取都是从容器当中拿同一个对象(map当中)

prototype:多实例的意思 就是当,IOC容器启动创建的时候,并不会创建对象放在容器在容器当中,当你需要的时候,需要从容器当中取该对象的时候,就会创建。

问:@Scope注解 有什么用?
答:@Scope注解的目的是用来调节作用域的


来介绍@Conditional注解
这个注解的意思就是按条件来注册bean
怎么来理解呢?
打个比方 比如我们要根据用户的操作系统来注册bean
提供两个类 一个是windows系统 就会return true
另一个类 要是系统是linux 则返回true

在配置类中 在@bean注解上加上@Conditional ( { 类.class } )
根据类的条件 去注册bean 如果是true 就注册 是fale就不注册
@Conditional注解也可以放在类上


来谈谈@Inmport注解,它是给容器导入组件的。
比如我有个组件(一个类) Color 类
有另外一个类需要用这个组件 我就可以利用这个注解来导入
做法
在需要这个组件的类上面田间这个注解
@Import (Color.class)


bean的生命周期
单实例:在容器启动的时候创建对象
多实例:在容器要用的时候,再来获取对象
单实例: 容器启动——>创建对象——>bean初始化(有个initMethed在它初始化的时候会被调用)——>关闭容器——>bean销毁

多实例: 容器启动不会创建对象,在需要时才会创建——>关闭容器——>bean销毁(有个destroyMethod在它销毁的时候会被调用)

如果有两个方法 A(),B()
需要在bean初始化 时 和销毁时分别执行 则这样写
@bean(initMethed=“A”,destroyMethod=“B”)

还可以通过创建一个类 让类去实现两个接口 重写两个方法
InitializingBean接口 : bean初始化时执行这个里面的方法
DisposableBean接口 :bean销毁时执行这个里面的方法


来谈谈@Value注解
这个注解 是给属性赋值的
例如
@Value( “张三”)
String name;

这样就给属性赋值了
也可以写表达式 # { 表达式 }
@Value("#{ 20-10 }")
int age
表示这个年龄为20-10岁 也就是10岁

如果要读取赋值配置文件里的内容 那么就用
@Value(" 配 置 文 件 里 面 属 性 的 名 称 " ) 我 们 做 的 在 线 教 育 项 目 o s s 阿 里 云 的 配 置 信 息 就 是 用 这 个 方 式 获 取 到 的 / / 读 取 a p p l i c a t i o n . p r o p e r t i e s 文 件 中 阿 里 云 o s s 中 的 配 置 文 件 内 容 @ V a l u e ( " {配置文件里面属性的名称}") 我们做的在线教育项目oss阿里云的配置信息就是用这个方式获取到的 //读取application.properties文件中 阿里云oss中的配置文件内容 @Value(" ")线oss//application.propertiesoss@Value("{aliyun.oss.file.endpoint}")
String endpoint;


给类这中的的属性注入对象

那么只需要在属性上方添加
@Autowired 根据属性类型进行自动装配
@Qualifier 根据属性名称进行注入
@Resource 可以根据类型注入 可以根据名称注入
这三个中的合适的属性 就可以将它的对象 注入到 当前类的属性中,(注意:另外一个类的类上方也要写 创建对象的注解

问:哪些是创建对象的注解?
答:
在类的上面 添加
1、@Component
2、@Service
3、@Controller
4、@Repository
意思是将类交给spring管理

如果无法从类型(@Autowired )方式注入 属性 (因为有相同类型的) 那么可以通过用@Autowired + @Qualifier 类型加名称的方式注入

@RequestParam 接收普通参数
@RequestPart 接收复杂类型的参数 比如文件JSON,XML等

  public String upload(@RequestParam("email") String email,
                         @RequestParam("username") String username,
                         @RequestPart("headimg") MultipartFile headimg,
                         @RequestPart("phoneimg") MultipartFile[] phoneimg) throws Exception{

@RequestMapping 请求路径映射,如果标注在某个controller的类级别上,则表明访问此类路径下的方法都要加上其配置的路径;最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求。

“@RequestMapping"的value值前后是否有“/”对请求的路径没有影响,即value=“book” 、”/book"、"/book/"其效果是一样的。

@PathVariable 注解提取路径中的变量()

 @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
    // implementation omitted
  }

@ResponseBody的作用其实是将java对象转为json格式的数据。@ResponseBody是作用在方法上的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值