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

Wordpress写文章贴代码安卓优化大师新版

Wordpress写文章贴代码,安卓优化大师新版,城乡建设委员会网站,音乐网站怎么做无线增值业务目录 1.什么是DI? 2.依赖注入的三种⽅式 2.1属性注⼊ 2.2构造⽅法注⼊ 2.3Setter 注⼊ 2.4三种注⼊优缺点分析 3.Autowired存在问题 1.什么是DI? DI: 依赖注⼊ 依赖注⼊是⼀个过程,是指IoC容器在创建Bean时, 去提供运⾏时所依赖的资源,⽽资源指的…

目录

1.什么是DI?

 2.依赖注入的三种⽅式

2.1属性注⼊ 

2.2构造⽅法注⼊

 2.3Setter 注⼊

 2.4三种注⼊优缺点分析

3.@Autowired存在问题 


1.什么是DI?

DI: 依赖注⼊
依赖注⼊是⼀个过程,是指IoC容器在创建Bean时, 去提供运⾏时所依赖的资源,⽽资源指的就是对象

简单来说, 就是把对象取出来放到某个类的属性中.

关于依赖注⼊, Spring也给我们提供了三种⽅式:

1.属性注⼊(Field Injection)

2.构造⽅法注⼊(Constructor Injection)

3.Setter 注⼊(Setter Injection)

都是使用@Autowired实现的。 

接下来,我们分别来看.


 2.依赖注入的三种⽅式

都是使用@Autowired实现的 

我们接下来会频繁使用到UserService类和UserController类以及获取 UserController 中的 sayHi⽅法。

1.UserService代码:

import org.springframework.stereotype.Service;@Service
public class UserService {public void doService(){System.out.println("doService~~~~");}
}

 2.UserController类依照我们选择的注入⽅式决定。

3.获取 UserController 中的 sayHi⽅法:

​
import com.wh.ioc.Controller.UserController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;//@ComponentScan(basePackages = "~~~~~")
@SpringBootApplication
public class SpringIocApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);UserController bean = context.getBean(UserController.class);bean.sayHi();}
}​

2.1属性注⼊ 

UserController类的实现代码如下:

import com.wh.ioc.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class UserController {@Autowiredprivate UserService userService;public void sayHi(){userService.doService();System.out.println("UserController Hi");}
}

2.2构造⽅法注⼊

import com.wh.ioc.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class UserController {private UserService userService;public UserController() {}@Autowiredpublic UserController(UserService userService) {this.userService = userService;}public void sayHi(){userService.doService();System.out.println("UserController Hi");}
}

注意:

  如果类只有⼀个构造⽅法,那么 @Autowired 注解可以省略;如果类中有多个构造⽅法,
那么需要添加上 @Autowired 来明确指定到底使⽤哪个构造⽅法。

 补充:

关于构造函数规范:

1.当我们添加有参构造函数时,一定也要把无参构造函数也添加上。

2.依赖注入时,就算只有一个构造函数也要添加@Autowired注解

 2.3Setter 注⼊

注解一定不能少

import com.wh.ioc.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class UserController {private UserService userService;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}public void sayHi(){userService.doService();System.out.println("UserController Hi");}
}

 2.4三种注⼊优缺点分析

1.属性注⼊

优点:

简洁,使⽤⽅便

缺点:

(1) 只能⽤于 IoC 容器 ,如果是⾮ IoC 容器不可⽤,并且只有在使⽤的时候才会出现 NPE(空指 针异常)
(2) 不能注⼊⼀个Final修饰的属性

 2.构造函数注⼊(Spring 4.X推荐)

 优点:

(1)注⼊的对象不会被修改

(2)可以注⼊final修饰的属性

(3)依赖对象在使⽤前⼀定会被完全初始化,因为依赖是在类的构造⽅法中执⾏的,⽽构造⽅法 是在类加载阶段就会执⾏的⽅法

(4)通⽤性好, 构造⽅法是JDK⽀持的, 所以更换任何框架,他都是适⽤的

缺点:

注⼊多个对象时, 代码会⽐较繁琐 

3.Setter注⼊(Spring 3.X推荐)  

优点:
⽅便在类实例之后, 重新对该对象进⾏配置或者注⼊

缺点:

1.不能注⼊⼀个Final修饰的属性

2.注⼊对象可能会被改变, 因为setter⽅法可能会被多次调⽤, 就有被修改的⻛险 


3.@Autowired存在问题 

我们接下来用打印学生信息的例子来说明

Student类:

import lombok.Data;@Data
public class Student {private String name;private Integer id;public Student() {}public Student(String name) {this.name = name;}public Student(String name, Integer id) {this.name = name;this.id = id;}
}
BeanConfig类:
import com.wh.ioc.Model.Student;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class BeanConfig {@Beanpublic Student StudentInfo() {return new Student("wh",01);}@Beanpublic Student StudentInfo2() {return new Student("Bob",02);}
}
DomeController类:
import com.wh.ioc.Model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class DomeController {@Autowiredprivate Student student;public void say(){System.out.println(student);}
}

启动类:

import com.wh.ioc.Controller.DomeController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;//@ComponentScan(basePackages = "~~~~~")
@SpringBootApplication
public class SpringIocApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);DomeController bean = context.getBean(DomeController.class);bean.say();}
}

运行:

报错的原因是,⾮唯⼀的 Bean 对象 

解释:

@Autowired是先按照类型去注入,匹配到多个对象时,再按照名称去注入。

如果我们明确注入对象的名称,则可以正确打印该学生信息。

DomeController类代码:

import com.wh.ioc.Model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class DomeController {@Autowiredprivate Student StudentInfo2;public void say(){System.out.println(StudentInfo2);}
}

结果:

 

那当我们没有明确注入对象的名称,又想得到正确结果我们可以怎么做?

有以下⼏种解决⽅案:
1.@Primary
2.@Qualifier
3.@Resource

1. @Primary

使⽤@Primary注解:当存在多个相同类型的Bean注⼊时,加上@Primary注解,来确定默认的实现。

直接加到Bean注⼊的方法上。

@Primary
@Bean
public Student StudentInfo() {return new Student("wh", 01);
}

2.@Qualifier

使⽤@Qualifier注解:指定当前要注⼊的bean对象。 在@Qualifier的value属性中,指定注⼊的bean 的名称。
@Qualifier注解不能单独使⽤,必须配合@Autowired使⽤
@Controller
public class DomeController {@Qualifier("StudentInfo2")@Autowiredprivate Student student;public void say(){System.out.println(student);}
}

3.@Resource注解

本身就是依赖注入注解,是按照bean的名称进⾏注⼊

@Controller
public class DomeController {@Resource(name = "StudentInfo")private Student student;public void say(){System.out.println(student);}
}

@Autowird 与 @Resource的区别是?

 1.@Autowired 是spring框架提供的注解,⽽@Resource是JDK提供的注解

 2.@Autowired 默认是按照类型注⼊,⽽@Resource是按照名称注⼊. 相⽐于 @Autowired 来说, @Resource ⽀持更多的参数设置,例如 name 设置,根据名称获取 Bean


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

http://www.mmbaike.com/news/83421.html

相关文章:

  • 桂林北站到象鼻山景区怎么坐车青岛网站制作seo
  • 网络全案推广百度排名优化工具
  • 怎么看网站什么时候做的附近的电脑培训班在哪里
  • 商城网站实例百度怎么发自己的小广告
  • 垦利网站设计网络广告策划书范文
  • 麻城网站建设大连seo关键词排名
  • 大兴模版网站开发公司哪家好seo优化需要多少钱
  • 网站中滚动条怎么做如何推广品牌知名度
  • 一条龙网站建设哪家好长沙互联网网站建设
  • 朝阳做网站公司全球网络营销公司排名
  • 怎样做网站发布信息qq推广软件
  • 必须在当地网站备案郑州客串seo
  • 集团做网站竞价账户托管公司
  • 黄山网站建设公司网店推广的渠道有哪些
  • 做网站得多长时间seo零基础教学
  • 如何通过axure做网站线上营销推广渠道
  • 温州网站制作系统百度引流推广
  • 一个空间如何做多个网站祁阳seo
  • app 微信 网站三合一营销型网站一般有哪些内容
  • 新乡 网站开发南昌百度推广联系方式
  • 建设官方网站网站服务器ip地址查询
  • 湘潭网站建设 搜索磐石网络百度免费推广怎么做
  • 静态网站可以做哪些内容网站设计软件
  • 企业网站cms系统论文网络营销品牌推广公司
  • 拨付网站建设费用的报告百度关键词查询工具
  • 深圳高端展位设计公司武汉百度搜索优化
  • 吴江网站建设中国网站建设公司前十名
  • 知道源代码如何做网站免费奖励自己的网站
  • 河北住建局与建设厅网站首码项目推广平台
  • 网站开发考试题韩国电视剧