spring 常量注入
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring 常量注入内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring 常量注入相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring 常量注入相关知识
-
Spring 常用注解@Controller 在控制层使用@Service 在业务逻辑层使用@Repository 在数据访问层使用@Component 泛指组件@Autowired 注入bean的注解@Resource 相当于@Autowired@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式@Configuration 声明当前类为配置类,相当于xml形式的Spring配置@ConponentScan 对Component进行扫描@value 为属性注入值@RunWith 运行器,Spring中通常用于对JUnit的支持@RequestMapping 用于请求
-
最详细的 Spring IOC 注入 (xml 注入 + 注解注入)@[toc](Spring IOC 容器的基本使用) 一、为什么要使用 Spring? 1.1 传统的 MVC 架构的程序 1.2 程序耦合性过高? 1.3 如何解耦? 1.4 Spring IOC 的依赖注入 二、Spring IOC 的依赖注入 2.1 使用构造函数完成依赖注入 2.1.1 标签的使用讲解 2.1.2 构造函数依赖注入的优缺点 2.1.3 使用构造函数完成依赖注入的实例 2.2 使用 setter 完成注入 2.2.1 使用 setter 完成依赖注入的功能 2.2.2 基于 setter 完成依赖注入的分析 2.3 复杂数据类型注入 2.3.1
-
Spring--依赖注入 or 方法注入 ?依赖注入 我们在 [Spring — 循环依赖]中谈到 Spring 的两种依赖注入方式 构造器注入 属性注入(setter注入也归属于此) @Service public class HelloService { /** * 属性注入 */ @Autowired private BeanFactory beanFactory; /** * 构造器注入 */ public HelloService(ApplicationContext applicationContext) { } /** * 属性注入 * */ @Autowired public void setEnvironment(Environment environment) { System.out.println(""); } } 关于构造
-
Spring 常用的注解及“依赖注入”的实现1、spring注解@Controller 声明Action组件@Service 声明Service组件 @Service("myMovieLister") @Repository 声明Dao组件@Component 泛指组件, 当不好归类时. @RequestMapping("/menu") 请求映射@Resource 用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName")@Resource有两个中重要的属性:name和type ,而Spring将@Resource注解的name属性解析为bean的 名字.(即bean的id名),而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用 byType自动注入策略
spring 常量注入相关课程
spring 常量注入相关教程
- 4.2 注入 OutputStream 在控制器的方法中注入 OutputStream 对象,只需要在方法中添加参数声明。如下实例:可使用 OutputStream 对象读取指定文件中的内容后直接响应给浏览器。@RequestMapping(value = "/testApi05")public void hello(OutputStream outputStream) throws IOException { Resource res = new ClassPathResource("/test.txt"); FileCopyUtils.copy(res.getInputStream(), outputStream);}test.txt 文件的内容是”this is a test’。文件直接放在项目的 src/main/java 目录下。在浏览器中输入请求路径 http://localhost:8888/sm-demo/testApi05 。你将在浏览器中看到:有句话叫做 “条条道路通罗马”,用在 Spring MVC 中真的是合适,依靠 Spring 强大的注入功能,只要原生开发中能有的对象基本上都能注入进去。
- 5. 常量 动态操作常量我们使用const_get和const_set两个方法。module Test (1..3).each do |num| const_set "CONSTANT_#{num}", num end (1..3).each do |num| const_set "CONSTANT_#{num}" endend# ---- 输出结果 ----123注意事项:const_get和const_set这两个方法要放在module里面才可以使用。另外不要对常量进行重复赋值。
- 5. 常量 所谓常量,就是恒常不变的量。我们可以将常量理解成一种特殊的变量。与变量不同的是,一旦它被赋值后,在程序的运行过程中不允许被改变。常量使用final关键字修饰:final DataType 常量名 = 常量值;Tips:常量的命名规范与普通变量有所不同,要将每个字母大写并用下划线字符分隔每个单词。如果我们尝试在代码中修改常量的值:class ConstantTest { public static void main(String[] args) { // 声明并初始化常量 TOTAL_NUM final int TOTAL_NUM = 200; // 对 TOTAL_NUM 重新赋值 TOTAL_NUM = 20; }}编译执行代码,编译器将会报错:ConstantTest.java:6: 错误: 无法为最终变量TOTAL_NUM分配值 TOTAL_NUM = 20; ^1 个错误适当地使用常量可以提高代码的安全性和可维护性。例如,我们可以在程序中声明一个表示网站名称的常量: final String SITE_NAME = "慕课网";,这样在所有需要用到网站名称的地方,都调用这个常量即可。这样既保证了其值不可修改,提高了代码的安全性,又统一了调用方的规范。
- 6. 常量池计数器与常量池 Tips:前文提出过,主版本号后边紧跟的是什么,现在我们揭开答案,主版本号后边紧跟的是常量池计数器,常量池计数器后边紧跟的是常量池。那么常量池后边紧跟的是什么?此处又提出问题,我们后续讲解会有解答。定义:我们先来看下两者的定义。常量池计数器:记录常量池中的常量的数量。由于常量池中的常数的数量是不固定的,所以在常量池的入口放置了一个 u2 类型的数据,来代表常量池容器记数值(constant_pool_count)。常量池计数器也是无符号数类型数据。常量池:Class 文件中的资源仓库,它是 Class 文件结构中与其他项目关联最多的数据类型,也是占用Class文件空间最多的数据项目之一,同时它还是 Class 文件中第一个出现的表类型数据项目。Tips:相信学习者对常量池的兴趣会比较大,为什么这么说呢?从常量池定义中,我们看到了一句话:“它还是Class文件中第一个出现的表类型数据项目”。表类型数据,终于等到了 Class 文件的表类型数据结构,我们本节会为学习者提供表类型的机构示意图。常量池计数器无符号数结构示意图:我们还是要按照 Class 文件的结构顺序一步一步来说,先要搞明白常量池计数器,然后再去学习表类型的常量池。常量池计数器,我们对于这种无符号数结构其实已经非常的了解了,所以此处我们点到即止,了解常量池计数器的定义及作用,了解了常量池计数器占用 u2 大小即可。常量池表结构示意图:我们终于接触到了 Class 文件中的表结构,那么我们先睹为快,然后再讲解常量池的重要知识点。常量池中存储的数据:常量池中主要存放着两种常量,字面量(Literal)和符号引用(Synbolic References)。字面量包括:文本字符、声明为 final 的常量值、基础数据类型的值等;符号引用包括:类和接口的全限定名、字段的名称和描述符、方法的名称和描述符。cp_info类型:cp_info 又可细分为 14 种结构类型。下表中第二列所说的标志,是指每一种数据类型的标记值,此处做简单了解即可。
- 2. 依赖注入案例 2.1概念介绍知识回顾对于依赖注入,我们在第一章第一节已经介绍过,我们回顾一下概念解释上面是我们之前对于依赖注入的一个通俗解释。那么这里再着重强调一下 IOC 控制反转与 DI 依赖注入的关系:IOC 控制反转是将对象实例化的动作交由了 Spring 框架, 它的作用是降低了程序的耦合,不需要我们手动的创建对象,但是程序的耦合性还是存在。对象中肯定会有一些其余对象的引用,那么这种引用就称呼为对象的依赖,而 DI 依赖注入其实 是 IOC 设计思想的一种表现形式。对于 这种属性依赖,我们无需手动赋予,也是讲赋值的动作交给 Spring ,那么这种操作就是 依赖注入。依赖注入方式:第一种方式是通过 xml 配置的方式实现;第二种方式是在属性或者方法上使用注解的方式实现。那么,本章节先带大家体验下 xml 方式实现依赖注入。2.2 工程实现:搭建动作介绍创建一个 maven 工程导入Spring 使用的依赖编写业务层的 Service 和持久层的 Dao java 类编写 Spring 的配置文件创建工程 导入依赖 省略可以参考之前创建过的IOC工程java 代码创建 Servcie 的接口和接口的实现类,代码如下://接口代码public interface UserService { public void deleteById(Integer id);}//实现类代码public class UserServiceImpl implements UserService { private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void deleteById(Integer id) { System.out.println("删除的方法执行"); }}UserDao 接口和实现类代码://dao接口代码public interface UserDao {}//dao实现类代码public class UserDaoImpl implements UserDao {}代码解释: dao的接口和实现类中并没有方法,只是为了测试 作为service中的属性依赖,可以实现由 Spring 完成动态注入。重点来了:spring 的核心配置文件:配置解释:在上面的配置文件中:bean 标签是描述一个被实例化的类 而 property 则表示一类中的属性property 标签中的属性 name 一般我们写成类中的属性名称, 实际上,起决定作用的并不是属性名,下面示例再展示ref 表示当前的属性 是一个引用对象,而引用的是谁呢? ref 中的值 必须是在容器中已经实例化的一个引用对象的唯一标识。value 当前的属性可以直接赋值,所以通过 value 中,填写要赋予的数值即可测试结果代码解释可以看到 我们得到了 service 中的类属性 Userdao 的实例,并且也 得到了 字符串属性 userName的值 zs2.3 property注入属性的解释刚刚我们在上面的示例中 展示了xml依赖属性的注入,也是比较好理解。这里我们强调一下使用的注意事项:如果是 property 属性标签实现属性注入,那么类中必须由配置在 property 标签中 name 属性的 set 方法下面我们测试一下set方法的改变:先讲 service 中 dao 的 set 方法改造如下:public void setDao(UserDao userDao) { System.out.println("执行了set方法 给dao属性赋值"); this.userDao = userDao;}这时候代码中的set方法变成了 setDao 配置文件不变,依然是<property name="userDao" ref="userDao"></property>我们看看会产生什么问题Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'userDao' of bean class [com.wyan.service.UserServiceImpl]: Bean property 'userDao' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:247) at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:426) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:266) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:77) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1646)可以看到异常的堆栈信息 无效的 userDao 属性, userDao 不可以 或者 没有有效的 setter 方法提供。更改xml文件中的 property 标签的 name 属性 为 dao<property name="dao" ref="userDao"></property>测试结果如下:所以我们说 property 中的 name 属性不一定要跟 Java类中的属性名保持一致 而是必须跟 setter 方法的名称一致
- 5.8 常量 常量就是定义并赋值后再也不能修改的量,通常一些不会改变的量,如配置、物理值等会声明为常量,在 ES6 之前是没有提供常量这一特性的。但是根据常量自身的特性,定义赋值后不能被修改,就可以通过一些方式来模拟常量。第一种就是采用约定的形式,通常常量都是大写,不同单词之间用下划线分隔。var PI = 3.1415926535;var DB_ACCOUNT = 'root';var DB_PASSWORD = 'root';这种方式定义的常量本质上还是变量,值还是可以修改的,但因为命名格式采用国际惯例,一眼就能看出是常量,不会对其修改。这种方式是最简单的方式,但不安全。第二种方式就是利用对象下属性的描述来控制可写性,将对象的属性设置为只读。var CONFIG = {};Object.defineProperty(CONFIG, 'DB_ACCOUNT', { value: 'root', writable: false,});console.log(CONFIG.DB_ACCOUNT); // 输出:rootCONFIG.DB_ACCOUNT = 'guest';console.log(CONFIG.DB_ACCOUNT); // 因为不可被改写,所以输出:root这种方式将常量都放在一个对象下,通过Object.defineProperty定义属性,设定其writable为false,就可以防止被改写。但有一个问题,CONFIG自身这个对象可能被修改。换一个思路,既然在最外层声明的变量是放在window上的,那可以用这个方式往 window上挂不可改写的属性。Object.defineProperty(window, 'DB_ACCOUNT', { value: 'root', writable: false,});console.log(DB_ACCOUNT); // 输出:rootDB_ACCOUNT = 'guest';console.log(DB_ACCOUNT); // 因为不可被改写,所以输出:root通常情况下 window 对象是不可被修改的,这样常量的安全系数就变得非常高,但缺点是可能性较差,通过一点修改可以提升可读性。var define = function(name, value) { Object.defineProperty(window, name, { value: value, writable: false, });};define('DB_ACCOUNT', 'root');define('DB_PASSWORD', 'root');只要约定好使用 define 函数定义的都为常量即可。还有两种方式,就是结合Object.seal与Object.freeze的特性来声明常量。前者可以使对象不能再被扩充,但是所有属性还需要再手动设置不可写,后者可以让对象不能扩充,属性也不能修改。这里对这两个原生方法不再做过多描述,有兴趣可以查阅相关 API 资料。
spring 常量注入相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议