当前位置: 首页 > news >正文

优化神马网站关键词排名价格专业做网站推广的公司

优化神马网站关键词排名价格,专业做网站推广的公司,网站验证码代码,网页设计教程ppt目录 前言 Component:通用的注解! Bean 引入第三方的类 Configuration 前言 首先:我们先简单描述一下这三个的作用 Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。 Bean注解告诉Spring这个方法将会…

目录

前言

@Component:通用的注解!

@Bean

引入第三方的类

@Configuration


前言

首先:我们先简单描述一下这三个的作用

@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。

@Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。用于显式声明单个bean,而不是让Spring像上面那样自动执行它。它将bean的声明与类定义分离,并允许您精确地创建和配置bean。另外@Bean注解的方法返回值是对象,可以在方法中为对象设置属性。

@Configuration即用来代替Spring配置文件的,它就是一个@Component组件,接收一个value值也就是bean的名字,value可以不填。

但是上面的讲解都只是冰冷的概念,决定重新捡起来,好好研究这些配置,因为虽说平时自己写的时候都是机械性的,甚至是试探性的,但是还是要更深入一点。

为什么要先讲这三个概念,是因为他们之间的关系,有些你中有我我中有你,最好先有一个大概的了解。

@Component:通用的注解!

通俗的讲:@Compent就是说,是标注这个类是一个组件类,只要你想将你写的类交给Spring容器来管理,那就可以用它!

1、@controller: controller控制器层(注入服务)

2、@service : service服务层(注入dao)

3、@repository : dao持久层(实现dao访问)

为什么摆出上面这三个,因为他们其实就是@Compent,例如我们进入到@Controller里看一下,发现在Controller上就有一个@Component,剩下的两个同理

package org.springframework.stereotype;
​
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;
import org.springframework.core.annotation.AliasFor;
​
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {@AliasFor(annotation = Component.class)String value() default "";
}

写一个简单的功能,先写一个类,用@Compent注解上

package com.newcrud.learn;
​
import lombok.Data;
import org.springframework.stereotype.Component;
​
@Data
@Component
public class KangShiFuTwo {String name;Integer age;public void getKangShiFuTwo(){System.out.println("getKangShiFuTwo");}
}

写一个测试类,可以用@Autowired获取到没说明已经在Spring容器里了

package com.newcrud.learn;
​
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;
​
@SpringBootTest
​
public class KangShiFuTwoTest extends AbstractTestNGSpringContextTests {@AutowiredKangShiFuTwo kangShiFuTwo;@Testpublic void testGetKangShiFuTwo() {kangShiFuTwo.getKangShiFuTwo();}
​
}

看执行结果

getKangShiFuTwo

@Bean

我们先看一下@Bean的源码

package org.springframework.context.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;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.core.annotation.AliasFor;
​
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {@AliasFor("name")String[] value() default {};
​@AliasFor("value")String[] name() default {};
​/** @deprecated */@DeprecatedAutowire autowire() default Autowire.NO;
​boolean autowireCandidate() default true;
​String initMethod() default "";
​String destroyMethod() default "(inferred)";
}

emmm,他没有@Compent

引入第三方的类

那,我们首先创建一个没有@Compent的类

package com.newcrud.learn;
​
import lombok.Data;
​
@Data
public class KangShiFuOne {String name;Integer age;public void getKangShiFuOne(){System.out.println("getKangShiFuOne");}
}

 再写一个配置类


​import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
@Configuration
public class MyConfiguration {@Beanpublic KangShiFuOne getKangShiFuOneConfig(){return new KangShiFuOne();}
}

再来写一个测试类

package com.newcrud.learn;
​
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;
@SpringBootTest
public class MyConfigurationTest extends AbstractTestNGSpringContextTests {@AutowiredKangShiFuOne kangShiFuOne;
​@Testpublic void testGetKangShiFuTwoConfig() {kangShiFuOne.getKangShiFuOne();}
}

结果如下

getKangShiFuOne

能被@Autowired获取到,是因为@Configuration的作用,那@Bean的作用是什么呢,因为他有一个@Compent没有的功能,那就是他可以将不在jar包里的类放到Spring容器里,比如说你在pom文件中引入的工具包,你并不能把@Compent放到里面去对不对,那你就可以通过@Bean的方式来获取。

这个涉及到 spring boot 的自动装载的概念,当你的 bean 不在你 jar 包的扫描目录下时,是没法实例化的给 spring 管理的。

@Configuration

官方文档描述:用@Configuration注释类表明其主要目的是作为bean定义的源

我们再来看一下@Configuration的源代码,发现在上面也有一个@Compent,那就说明,它也有@Compent的功能

package org.springframework.context.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;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {@AliasFor(annotation = Component.class)String value() default "";boolean proxyBeanMethods() default true;
}

通俗的来讲,这个就是代表它所注释的类是一个配置类,但什么才是配置类呢,上面我们也看到了@Configuration好像也就是个@Compent啊,没啥大用

那我们先来编写两个类

package com.newcrud.learn;import lombok.Data;@Data
public class KangShiFuFour {public  KangShiFuFour(){System.out.println("getKangShiFuFour");}String name;Integer age;
}
package com.newcrud.learn;import lombok.Data;@Data
public class KangShiFuThree {public  KangShiFuThree(){System.out.println("getKangShiFuThree");}String name;Integer age;
}

再来写我们的@Configuration

package com.newcrud.learn;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyConfigurationTwo {@Beanpublic KangShiFuThree getKangShiFuThree(){return new KangShiFuThree();}@Beanpublic KangShiFuFour getKangShiFuFour(){getKangShiFuThree();return new KangShiFuFour();}
}

再写我们的测试类

package com.newcrud.learn;import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;@SpringBootTest
public class MyConfigurationTwoTest extends AbstractTestNGSpringContextTests {@Testpublic void testGetKangShiFuThree() {//这个只是保留一个执行的入口,没有实际意义,我们要看的是启动信息}
}

在启动后会打印两个类的初始化函数输出

getKangShiFuThree
getKangShiFuFour

但是我们仔细想一下,我们是调用了两次getKangShiFuThree的构造函数的,但是只打印了一次,这也是他的一个功能:保持单例模式!

我们再来看一下他的另一个功能

@Configuration类允许通过调用同一类中的其他@Bean方法来定义bean之间的依赖关

package com.newcrud.learn;import org.springframework.context.annotation.Bean;public class MyConfigurationTwo {@Beanpublic KangShiFuThree getKangShiFuThree(){return new KangShiFuThree();}@Beanpublic KangShiFuFour getKangShiFuFour(){getKangShiFuThree();//去掉@Configuration,这里就会报错:Method annotated with @Bean is called directly. Use dependency injection instead.,因为未添加@Configuration注解,导致@Bean之间相互调用出错return new KangShiFuFour();}
}

http://www.15wanjia.com/news/154928.html

相关文章:

  • 网站建设绩效考核方案jsp 做网站需要什么
  • app做好了网站怎么做wordpress自带搜索引擎
  • 江西省建设监理协会网站百度首页排名优化公司
  • 做网站该读啥wordpress顶部图像修改
  • 中国做网站的公司排名学校网站建设意义有哪些
  • 网站改版设计思路扬州建设企业网站
  • 免费手机网站模板深圳南山网站建设工作室
  • 企业网站哪个平台好崇信县门户网站
  • 网站2级页面怎么做对网站建设有什么样好的建设意见
  • 河南周口东宇网站建设亳州蒙城网站建设
  • 鑫迪建站系统免费logo设计图案创意
  • 北辰做网站wordpress点击量最多的文章
  • 爱站网自媒体数据wordpress基础版
  • 高端网站建设哪家公司好网站开发项目答辩ppt
  • 汕头seo优化seo搜索优化排名
  • 站长之家查询的网址南昌网站建设kaiu
  • 网站一般建什么做简单网站需要学什么软件有哪些
  • discuz做资讯网站合适吗wordpress页面目录
  • 文档阅读网站模板下载邵阳建设局网站
  • 网站做的支付宝接口吗附近的招聘工作
  • 石家庄高端网站制作福州 网站设计
  • 电子商务网站管理内容网站视频与服务器的关系
  • 个人做外贸的网站有哪些站长交流平台
  • 学校网站建设培训方案模板东莞企业网络推广运营技巧
  • 网站建设微分销个人手机版网站app怎么做
  • 教学网站前台er图站长网站素材
  • int域名网站有哪些软件开发管理平台
  • 网站设计工程师是it行业吗网站的标志可以修改吗
  • 做网站的人跑了网站可以恢复吗武宁县建设工程招标公告门户网站
  • 怎样设置 自己的网站学校资源网站的建设方案