springmvc--spring入门--xml&&注解

24 Java xml&&枚举&&注解 详解~ 万维网联盟(W3C)万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。建立者: Tim Berners-Lee (蒂姆·伯纳斯·李)。是Web技术领域最具权威和影响力的国际中立性技术标准机构。到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南,如广为业界采用的超文本标记语言HTML(标准通用标记语言下的一个应用)、可扩展标记语言XML(标准通用标记语言下的一个子集)... 阅读详情

目录

spring 概述

基本spring项目搭建(maven)

SpringIOC概念(反转控制)

applicationContext&&BeanFactory

分模块配置

属性注入

注解配置

SpringJunit测试

Spring AOP


spring 概述

Spring是分层的、JavaSE/EE一站式(full-stack)、轻量级开源框架。

spring负责管理项目中的所有对象,是对象的容器,类似于map;

一站式:只是用spring就可以完成三层架构开发,框架性质属于容器性质,装对象容器

以IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了表现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库

基本spring项目搭建(maven)

目录结构

pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.bufnali</groupId>
    <artifactId>spring_Demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.2.0</version>
            <scope>compile</scope>
        </dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.1.RELEASE</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

applicationContext.xml

<?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">
<!--将User对象交给Spring容器管理-->
    <bean class="cn.bufanli.pojo.User" name="user"></bean>
</beans>

user.java

 

package cn.bufanli.pojo;

/**
 * @author BuShuangLi
 * @date 2019/1/10
 */
public class User {
     private String Name;
     private String id;
     private String age;

     public String getName() {
          return Name;
     }

     public void setName(String name) {
          Name = name;
     }
     /**
      *     初始化方法
      */
     public void init() {
          System.out.println("spring初始化方法");
     }
     /**
      *     容器销毁方法
      */
     public void destroy() {
          System.out.println("spring初始化方法");
     }

     public String getId() {
          return id;
     }

     public void setId(String id) {
          this.id = id;
     }

     public String getAge() {
          return age;
     }

     public void setAge(String age) {
          this.age = age;
     }

     public User(String name, String id, String age) {
          Name = name;
          this.id = id;
          this.age = age;
     }

     public User() {

     }
}

demo.java

package cn.bufanli.Demo;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * @author BuShuangLi
 * @date 2019/1/10
 */
public class Demo {
     @Test
     public void fun(){
          //创建容器对象 从类路径下加载
          ApplicationContext ac =new ClassPathXmlApplicationContext("spring/applicationContext.xml");
          //创建容器对象 从硬盘绝对路径下加载
          //ApplicationContext fileSystemXmlApplicationContext = new FileSystemXmlApplicationContext("d:/xxx/xx/xxx.xml");
          //向容器要user对象传入配置文件中Bean标签中name属性值
          Object user = ac.getBean("user");
          System.out.println(user);
     }
}

控制台

SpringIOC概念(反转控制)

我们创建对象的方式反转了,之前是有我们开发人员自己维护,包括依赖关系也是自己new对象

使用了Spring之后对象的创建以及依赖关系可以由spring创建以及new

反转就是之前由我们自己创建反转给了程序(Spring)

DI(依赖注入)实现IOC思想需要DI支持,

注入方式:

set方法注入
构造方法注入
字段注入

注入类型:

值型类型注入(八大基本数据类型)

引用类型注入(对象中嵌套另一个对象)

applicationContext&&BeanFactory

都是spring实例化对象的工厂类

BeanFactory特点
  1. BeanFactoryspring原始接口:,功能单一
  2. BeanFactory接口实现类的特点:每次在获得对象时才会创建对象,相当于延迟加载类似
applicationContext特点
  1. 每次容器启动时会创建对象,并提供更多功能
  2. web开发中使用applicationContext接口,在资源匮乏环境可以使用BeanFactory接口

 

 

applicationContext两个实现类实现类

从类路径下加载配置文件 

ApplicationContext ac =new ClassPathXmlApplicationContext("spring/applicationContext.xml");

从硬盘决定路径下加载配置文件  

//ApplicationContext fileSystemXmlApplicationContext=new FileSystemXmlApplicationContext("d:/xxx/xx/xxx.xml");

SpringBean的三重创建对象的方式

第一种方式,上面代码方法

第二、三种方式:

1)创建一个工厂类

package cn.bufanli.Factory;

import cn.bufanli.pojo.User;

/**
 * @author BuShuangLi
 * @date 2019/1/10
 */
public class UserFactory {
     /**
      * 静态工厂实例化对象------>第二种方式
      * @return
      */
     public static User creatUser(){
          return new User();
     }
     /**
      * 实例工厂实例化对象------>第三种方式
      * @return
      */
     public  User creatUser2(){
          return new User();
     }
}

2)applicationContext.xml配置文件

<?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">
    <!--将User对象交给Spring容器管理
    name: bean标签的表示,也是通过name获取实例对象
    class:类的全路径
    scope属性:
        singleton默认值:单例模式,这个对象再容器中只会存在一个实例
        prototype: 多例模式,每次获得是才会创建,并且每次创建的都是新的对象
        request:web环境下对象与request生命周期一致
        session:web环境下对象与session生命周期一致
    init-method
       初始化对应方法名
    destroy-method="destroy
        销毁对应方法名
    -->
    <!--第一种创建方式-->
    <bean  class="cn.bufanli.pojo.User" name="user" scope="prototype" init-method="init" destroy-method="destroy"></bean>
    <!--第二种创建方式 factory-method方法名其余相同-->
    <bean  class="cn.bufanli.Factory.UserFactory" name="user2" factory-method="creatUser"></bean>

    <!--创建方式三实例工厂创建-->
    <!--将工厂交给容器管理-->
    <bean  class="cn.bufanli.Factory.UserFactory" name="UserFactory" ></bean>
    <!--factory-bean="UserFactory" factory-bean属性值为工厂bean标签nama属性值-->
    <bean  factory-bean="UserFactory" name="user3" factory-method="creatUser2"></bean>

</beans>

分模块配置

<import resource="dataApplication.xml"></import>

属性注入

set方法注入,构造函数注入

<?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">
    <!--set方式注入-->
    <bean class="cn.bufanli.pojo.User" name="user" scope="prototype">
        <!-- 属性注入
        为user对象name属性注入value————tom值-->
        <property name="name" value="tom"></property>
        <!--对象中的对象注入
        -->
        <property name="car" ref="car"></property>
    </bean>
    <!--将car对象配置导容器中-->
    <bean class="cn.bufanli.pojo.Car" name="car">
        <property name="name" value="宏碁"></property>
    </bean>
<!--构造函数注入-->
    <bean name="user2" class="cn.bufanli.pojo.User">
        <constructor-arg name="name" value="22"></constructor-arg>
        <constructor-arg name="car" ref="car"></constructor-arg>
        <constructor-arg name="id" value="2"></constructor-arg>
        <constructor-arg name="age" value="22"></constructor-arg>

    </bean>
</beans>

随着项目的启动创建applicationContext类

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <!--可以让spring容器随着项目的创建而创建-->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--指定加载spirng配置文件的位置-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext.xml</param-value>
    </context-param>
</web-app>

注解配置

注解代替配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--自动扫描Spring中的注解组件-->
    <context:component-scan base-package="cn.bufanli"></context:component-scan>

</beans>

 

代码案例

package cn.bufanli.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

/**
 * @author BuShuangLi
 * @date 2019/1/11
 *  作用都是将类注入到spring容器
 *  Component("car")   通用
 *  Repository("car") dao层与数据库层交互使用
 *  Controller("car") web层与前端页面交互
 *  Service("car")    service层业务层逻辑代码
 *
 *  Scope 设置单例多例默认是单利
 */

@Component("car")
@Scope(scopeName = "prototype")
public class Car {
     /**
      *  Value 相当于给name属性注入值也可以加到set方法上
      */
     @Value("lisi")
     private String name;
     /**
      * Autowired 自动装配对象
      * Qualifier 找name为user的对象 指定name 和Autowired配合使用
      * Resource   手动注入,指定name为user的对象 指定name单独使用
      */
//     @Autowired
//     @Qualifier("user")
     @Resource(name="user")
     private User user;

     /**
      * 初始化方法  对象创建
      */
     @PostConstruct
     public void init(){}
     /**
      * 销毁方法 对象销毁
      */
     @PreDestroy
     public void destory(){}
     /**
      * Value
      * @param name
      */
     //@Value("lisi")
     public void setName(String name) {
          this.name = name;
     }
     public String getName() {
          return name;
     }


     public Car() {

     }
     public Car(String name) {
          this.name = name;
     }
}

SpringJunit测试

 

package cn.bufanli.pojo;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

/**
 * RunWith创建容器
 * ContextConfiguration 读取配文件位置
 */
@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:spring/applicationContext.xml")
public class UserTest {
     @Resource(name="user")
     private User u;

     @Test
     public void tester(){
          System.out.println(u.getName());
     }
}

Spring AOP

概述:spring能够对容器中管理的对象生成动态代理对象,之前需要手动写动态代理对象,现在需要使用注解或者xml的方式配置

 

Spring动态代理实现:
1.动态代理  必须实现接口,才能产生代理对象,如果没有接口将不能实现动态代理对象

2.cglib 第三方代理技术,可以对任何类生成代理,代理原理,对目标对象进行继承代理,如果目标对象被final修饰将不能使用cglib代理

 

动态代理代码

代理类

package cn.bufanli.proxy;

import cn.bufanli.service.ServiceImpl.UserServiceImpl;
import cn.bufanli.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author BuShuangLi
 * @date 2019/1/14
 */
@Component("userServiceProxyFactory")
public class UserServiceProxyFactory implements InvocationHandler {
     @Autowired
     private UserService userService;
     public UserService getUserServiceProxy(){
          //生成动态代理对象
          UserService o = (UserService)Proxy.newProxyInstance(UserServiceProxyFactory.class.getClassLoader(),
                   UserServiceImpl.class.getInterfaces(),
// implements InvocationHandler 实现了这个接口
                   this);
          return o;
     }
     /**
      *
      * @param proxy 当前代理对象
      * @param method 当前调用的方法
      * @param args 当前方法执行的参数
      * @return
      * @throws Throwable
      */
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
          System.out.println("打开事务");
          Object invoke = method.invoke(userService, args);
          System.out.println("提交事务");
          return invoke;
     }
}

业务层实现类

package cn.bufanli.service.ServiceImpl;

import cn.bufanli.service.UserService;
import org.springframework.stereotype.Service;

/**
 * @author BuShuangLi
 * @date 2019/1/14
 */
@Service
public class UserServiceImpl implements UserService {
     public void save() {
          System.out.println("保存用户");
     }

     public void delete() {
          System.out.println("删除用户");
     }

     public void update() {
          System.out.println("更新用户");
     }

     public void find() {
          System.out.println("查询用户");
     }
}

测试方法

  @Autowired
     private UserServiceProxyFactory userServiceProxyFactory;
     @Test
     public void tester1(){
          UserService userServiceProxy = userServiceProxyFactory.getUserServiceProxy();
          userServiceProxy.delete();
     }

控制台

cglib代理代码

package cn.bufanli.cglib;

import cn.bufanli.service.ServiceImpl.UserServiceImpl;
import cn.bufanli.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.proxy.Callback;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import org.springframework.stereotype.Component;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author BuShuangLi
 * @date 2019/1/14
 */
@Component("userServiceCglibFactory")
public class UserServiceCglibFactory implements MethodInterceptor {
     public UserService getUserServiceCglib(){
          //帮助生成代理对象的
          Enhancer en = new Enhancer();
          //设置代理对象
          en.setSuperclass(UserServiceImpl.class);
          //设置代理要做什么
          en.setCallback(this);
          //创建代理对象
          UserService us = (UserService)en.create();
          return us;
     }


     /**
      *
      * @param o 被代理对象
      * @param method 被代理对象原始方法
      * @param objects
      * @param methodProxy
      * @return
      * @throws Throwable
      */
     public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
          //打开事务
          System.out.println("打开事务");
          //调用原有方法
          Object o1 = methodProxy.invokeSuper(o, objects);
          //提交事务
          System.out.println("提交事务");
          return o1;
     }
}

测试类

   @Autowired
     private UserServiceCglibFactory userServiceCglibFactory;
     @Test
     public void tester2(){
          UserService userServiceCglib = userServiceCglibFactory.getUserServiceCglib();
          userServiceCglib.delete();
     }
AOP名词

Joinpoint(连接点):

目标对象中可以增强的方法叫连接点

Pointcut(切入点):

目标对象中已经增强的方法,可以针对某一个方法进行增强

Advice(通知.增强):

增强的方法

Target(目标对象):

被代理对象

WeAVing(植入):

将通知应用到切入点的过程

Proxt(代理):

将通知植入带目标对象形成代理对象
Aspect(切面):切入点+通知

 

Spring中AOP使用

导入依赖

 <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.13</version>
        </dependency>
        <!-- aspectj支持 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.9</version>
        </dependency>

通知类

package cn.bufanli.aspect;

import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;

/**
 * @author BuShuangLi
 * @date 2019/1/14
 * 通知类
 */
public class MyActive {
     //前置通知-->在目标方法运行之前调用

     //后置通知(如果出现异常不会调用)-->在目标方法运行之后调用

     //环绕通知-->在目标方法之前和之后都调用

     //异常类拦截通知-->如果出现异常就会调用通知代码

     //后置通知(无论是否出现异常都会调用)-->在目标方法运行之后调用

     /**
      * 前置通知
      */
     public void before(){
          System.out.println("前置通知");
     }

     /**
      * 后置通知-->如果出现异常不会调用
      */
     public void afterReturning(){
          System.out.println("后置通知(如果出现异常不会调用)");
     }
     /**
      * 环绕通知
      */
     public Object around(MethodInvocationProceedingJoinPoint  proceedingJoinPoint){
          Object proceed = null;
          try {
               //调用目标方法
               System.out.println("环绕通知之前");
               //调用目标方法
               proceed=proceedingJoinPoint.proceed();
               System.out.println("环绕通知之后");

          } catch (Throwable throwable) {
               throwable.printStackTrace();
          }
          return proceed;
     }

     /**
      * 异常通知
      */
     public void afterException(){
          System.out.println("异常通知");
     }
     /**
      * 后置通知-->出现异常也会调用
      */
     public void after(){
          System.out.println("后置通知-->出现异常也会调用");
     }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--自动扫描Spring中的注解组件-->
    <context:component-scan base-package="cn.bufanli"></context:component-scan>
    <!--aop-->
    <!--配置目标对象-->
    <bean class="cn.bufanli.service.ServiceImpl.UserServiceImpl" name="userService"></bean>
    <!--配置通知对象-->
    <bean class="cn.bufanli.aspect.MyActive" name="myActive"></bean>
    <!--将配置通知类绑定到目标对象-->
    <aop:config>
        <!--配置切入点
        expression: 切点表达式
        原始:
            public void cn.bufanli.service.ServiceImpl.UserServiceImpl.save()
            <aop:pointcut id="pc" expression="execution(public void cn.bufanli.service.ServiceImpl.UserServiceImpl.save())"></aop:pointcut>
        改进:
            public可以省略  void 可以为 * 表示对返回值不做要求
            UserServiceImpl  *ServiceImpl 表示已什么结尾
            save() save(..) 表示对方法内的参数不做要求
        <aop:pointcut id="pc" expression="execution( * cn.bufanli.service.ServiceImpl.*ServiceImpl.save(..))"></aop:pointcut>
        -->
        <aop:pointcut id="pc" expression="execution( * cn.bufanli.service.ServiceImpl.*ServiceImpl.save(..))" ></aop:pointcut>
       <aop:aspect ref="myActive">
           <!--前置通知-->
           <aop:before method="before" pointcut-ref="pc"></aop:before>
           <!--后置异常-->
           <aop:after-returning method="afterReturning" pointcut-ref="pc"></aop:after-returning>
           <!--环绕通知-->
           <aop:around method="around" pointcut-ref="pc" ></aop:around>
           <!--异常拦截通知-->
           <aop:after-throwing method="afterException" pointcut-ref="pc"></aop:after-throwing>
           <!--后置通知-->
           <aop:after method="after" pointcut-ref="pc"></aop:after>
       </aop:aspect>
    </aop:config>
</beans>

测试

package cn.bufanli.pojo;


import cn.bufanli.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

/**
 * RunWith创建容器
 * ContextConfiguration 读取配文件1位置
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/applicationContext.xml")
public class UserTest {

     @Resource(name = "userService")
     private UserService userService;
     @Test
     public void tester3(){
          userService.save();
          userService.find();
          userService.delete();
          userService.update();
     }


}

 

在 Ubuntu 上安装和配置 PostgreSQL 实录 本文介绍了在Ubuntu系统上安装和配置PostgreSQL数据库的完整步骤。主要内容包括:1)通过官方源或PPA源安装最新版本;2)修改配置文件(postgresql.conf和pg_hba.conf)以允许远程访问;3)设置postgres用户密码;4)创建新用户并配置权限;5)防火墙设置和重启服务;6)验证安装和远程连接方法。文章提供了详细的命令行操作指导,帮助用户完成从安装到远程访问的全部配置过程。 阅读详情

相关推荐

S7-1200控制S120变频器

②:硬件目录下,添加实物S120设备进行组态(其它现场设备--PROFINET IO--DRIVES......②:双击S120进行IP地址和设备名称设置(注:此处要与STATER软件设置S120一致)M10.0接通时,电机开始运行,M10.0断开,电机停止,调试完成。①:将S7-1200与S120进行通讯连线。④:STATER软件下设置与组态一致的报文。①:点击添加新设备,按实物进行设备组态。②:打开OB1,编写启动停止程序。①:查看S120报文地址。②:模块下添加DO矢量。③:子模块下添加报文。

weixin_38261173的博客 4868

XML

XML:可扩展的标记语言。 XML用途: 统一的数据文件规范。统一 统一的解析API。易于使用 使用非常广泛。大小写敏感 XML实体引用: &lt; :< (小于) &gt; :> (大于) &amp :&(与) &apos; :'(单引号) &quot; :" (双引号) XML格式: 一般情况下都是UTF-8编...

19:30的博客 1138

TVS 和压敏电阻联合使用进行浪涌保护时,压敏电阻的压敏电压要低于TVS 的钳位电压 VC。

通过先让MOV接管,可以确保在大多数情况下,电压不会迅速上升到TVS二极管的钳位电压,从而保护TVS二极管免受持续高能量冲击的损害。总结来说,将MOV的压敏电压设置得低于TVS二极管的钳位电压,可以提供一种分级的保护机制,优化浪涌保护性能,同时保护敏感的TVS二极管不被过度的能量冲击损坏,并延长其使用寿命。MOV吸收的能量(Wmov):假设浪涌电流为10kA,MOV导通后将电压限制在300V,那么Wmov = Ipp * Vmov = 10kA * 300V = 3MW。例如,Vmov可以设定为275V。

weixin_66642980的博客 2248

XML中的&使用

由于项目需要, 将参数写进xml文件中,参数中包含"&amp;"符号,默认使用txt打开。解析xml时,发现“&amp;”符不存在了。后来网上 搜索才发现原来xml中的“&amp;”需要使用”&amp;amp;“这种形式,解析的时候才不会出错。 另外,其他特殊符号也记录一下: &amp;lt;  小于号 &amp;gt;  大于号 &amp;amp; &amp;  &amp;apos; ...

martinkeith的博客 3万+

ADI恒流驱动芯片LT3763调试心得(25A恒流驱动)

看似很简单的一个电路,调了好几版硬件,中间还出现过一个插曲,就是电感,我用的是27A,1.5uH的,贴片封装,由于频繁试板,电感来回用热风枪拆了3次,结果上电空载到3A都没有问题,但是以上10A以上,就出现烧LT3763和mos的情况,一连烧了8片,搞得有点怀疑人生,一度觉得我的电路设计有问题,邮件咨询ADI的FAE后,确认电路设计没有问题。1、大功率同步整流的Nmos管都是取不同的型号,就是厂家推荐的主开关管和续流管的型号往往都不一样,这个里面有什么讲究,我没有整明白,暂时也不需要弄明白。

liming98lm的博客 3922

泛微E9开发 明细表字段赋值到主表字段,将各类型合计赋值到主表类型合计中

①绑定明细表类型、预计金额字段的值改变事件,每当有值发生改变,就需要重新计算供应商1、供应商2、供应商3的合计,如果不绑定这两个字段的话,会出现计算不及时或计算错误的问题。②当有明细行被删除时,也需要重新计算供应商1、供应商2、供应商3的合计,比如删除了供应商1的明细行,如果不重新计算,那么供应商1的值还是被删之前的值,合计错误。将各类型合计赋值到主表类型合计中。

a_waste_only的博客 3836

Xml特殊符号

在xml中 列如 & 符号为特殊符号,是不能直接使用的。 使用 &amp; 即可,注意 特殊字符后要加";"的 下面是一些特殊符号的使用 &lt; < 小于号 &gt; > 大于号 &amp; & 和 &apos; ' 单引号 &quot; " 双引号 ...

qq_42345116的博客 857

过压保护电路(OVP)

作者:AirCity 2020.2.4 Aircity007@sina.com 本文所有权归作者Aircity所有 1 示例一 当VBUS=5V时,各点电压电流如图所示,Q1接近截止,输出信号是5V。 当VBUS=5.4V开始,输出信号开始下降,直到VBUS=6.1V,输出信号降低为0.6V。 下面是实测波形,这个电路,输出信号的电压不会超过5.4V,这个输出信号可用于电源的控制信号。 2 ...

AirCity123的博客 3万+

在XML配置文件中输出&符号

XML里是无法直接正常输出&等特殊字符的,可用&转义表示!

jackyrongvip的专栏 1640

STM32实战开发(99):基于STM32的智能交通灯控制系统设计与实现

随着城市化进程的加速和交通流量的不断增长,传统的交通灯控制系统已逐渐不能满足现代城市交通管理的需求。为了更好地提高交通效率、减少交通拥堵、降低事故发生率,智能交通灯控制系统成为了解决这一问题的重要途径。通过智能算法和自动化控制,智能交通灯控制系统能够根据实时交通流量和交通状况来自动调整红绿灯的切换,从而优化交通流和提高交通安全。STM32作为一款高性能的微控制器,具备较强的运算能力、丰富的外设接口和优良的功耗表现,非常适合用来设计和开发智能交通灯控制系统。

2201_76125393的博客 1219

红米k60 修复“NV损坏” 去除主板校验电阻步骤解析与图示

红米k60 基带代码:mondrian。搭载‌高通骁龙8+ Gen1处理器.国外版本称:POCO F5 Pro适用于以下型号的小米机型:23013RK75C, 23013PC75G。 💝💝💝通过博文了解 1💝💝💝-----此机型修复NV损坏硬件类操作主板图示 2💝💝💝-----了解设备出现NV损坏的底层逻辑 3💝💝💝 ------具体修改步骤

小马哥的专栏 401

XML 基础知识 && XXE 漏洞原理解析及实验(基础篇)

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。同时每个成长路线对应的板块都有配套的视频提供:当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

Jinmindong 1410

连续相位调制通信调制方法的载波同步和定时同步研究及MATLAB仿真

本文将探讨CPM调制方法中的载波同步和定时同步问题,并提供MATLAB仿真源代码。本文讨论了连续相位调制通信中的载波同步和定时同步问题,并提供了相应的MATLAB仿真源代码。通过适当的载波同步和定时同步方法,可以实现对CPM信号的准确解调。希望本文对您理解连续相位调制通信调制方法的载波同步和定时同步问题有所帮助,同时也为您提供了一些MATLAB仿真实现的思路和示例代码。在CPM系统中,载波同步的主要任务是估计接收信号的载波频率偏移和相位偏移。在CPM系统中,常用的定时同步方法是基于自相关函数的峰值检测。

2301_79331230的博客 692

XML中的&

XML中的&amp;需转义成&amp;amp;或者用CDATA包住,否则解析的时候会报错

liduanwh的博客 8940

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

xml中的&符号使用

xml中的&符号使用 < 小于号 > 大于号 & & ' 单引号 " 双引号

lielai4654的博客 2904

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

XML && XML的解析

XML && XML的解析 从技术流派上讲,XML解析也分为: 1. DOM: 跟HTML类似,是整个将XML文件加载到内容中,然后映射为Java对象,进行解析。 弊端: 不适合处理大型的XML文件。 优势:保留了节点的信息,方便操作。 2. SAX 不是完整的加载整个XML文件,而是一边读,一边解析。 优势: 可以处理大型的XML文件 弊端: 它由于读取完成以后就丢弃信息,所以,无法操作XML文档,只能读取。 市面上能够解析XML的库有很多,包括Java语言自己的。 其中

weixin_47371330的博客 747

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

xml 标签带有符号php,详解xml型字符串解析时存在& < >符号时的解决方案

问题产生:在接口调用得出一个xml型字符串,一直报错The entityname must immediately follow the '&' in the entity reference经查发现 xml的内容里存在有 &符号 而 通过dom4j读取时 会发生错误在xml中 “&”“”这样的标签存放在内容里是不合法的,会经常出问题。下面找到解决方法:实测 替...

weixin_30896451的博客 630

在xml文件中不能直接使用&

在xml文件中不能直接使用&,会被转义为上面的&amp ;(写一起就会被转义成&,所以空了一格),当直接把数据从xml中拿出来时,仍然保持转义状态 将&amp换成" & "即可

qq_45076524的博客 775

Spring项目applicationContext.xml中配置数据库连接添加多个参数在xml文件和properties文件中&符号的差异

笔者在解决mysql数据库插入中文的问题时,需要在数据库连接的URL添加多个参数,需要&符号连接: jdbc:mysql:///spring_db?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8 在Spring的xml配置文件中&要用&amp;连接多个参数 <bean id="dataSource" class="com.alibaba.druid.po...

一个人 908

Spring XML中如何使用& 符号,比如数据库MySQL连接

<property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false"></property> 使用&amp; 代替&符号,注意后面的分号

JSON_ZJS的博客 669

XML文件中“&“、“>“、“<“符号需要转义

在XML文件中,jdbc的url中的‘&’符号会报有红色错误,通常需要 转义成 &amp;来使用 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSl=false"/> ...

键盘烫手的博客 9332

XML&正则表达式

学习目标 1、了解XML的发展跟历史 2、了解XML跟HTML的区别 3、熟练XML的语法规则 3、了解XML的约束 4、熟练XML的解析 5、熟练正则的解析 第1章 XML 1.1 概述 XML(EXtensible Markup Language)可扩展的标记语言。主要用于数据交换。在HTML发展过程中,由于游览器厂商的恶性竞争,都在兼容不规范的写法,以用来吸引开发者。这与W3C的初衷相违背。于是W3C制定了XML标准,想以此替代HTML进行数据展示。但此并不能吸引开发者,XML最终以失败告终。XML

chenguoao1999的博客 3459

字符“&”在XML文件中需要被转义

今天弄Mybatis的配置文件时,因为这样一条语句 <property name="url" value="jdbc:mysql://localhost/cloud_study?useSSL=false&serverTimezone=UTC" /> 而运行出错。后来翻阅一些资料,发现是因为字符“&”在XML文件中需要被转义,遂将上文中的&改为其转义字符&amp;就没有问题了。 本文参考资料包括JDBC连接Mysql数据库出现的问题汇总 How to escape

qq_23204557的博客 1万+

【XML基础-1】深入理解XML:介绍、语法规则与实际应用

XML(eXtensible Markup Language)是一种标记语言,用于存储和传输结构化数据。与HTML专注于数据显示不同,XML专注于数据本身及其结构。可扩展性:用户可以自定义标签和数据结构自描述性:数据与其描述信息共存平台无关性:独立于任何特定硬件或操作系统标准化:由W3C维护的开放标准XML的设计目标是存储和传输数据,同时保持简单性和通用性,这使得它成为不同系统间数据交换的理想选择。!ELEMENT。

weixin_39033358的博客 2526

XML && XML文件的约束

XML && XML文件的约束 用来约束我们的XML的内容需要符合一定的业务规则。从技术上讲,有两种约束的方式。一种是DTD约束文件的方式,一种是Schema约束文件的方式。 DTD相对简单,描述能力差一些。典型的代表: MyBatis Schema相对复杂,描述能力强一些。典型的代表:JavaWeb约束、 Spring DTD约束的方式 1.文件名以 .dtd 结尾 2. 它本身也是一个 xml 文件 3. 它里面定义了一些特殊的标签 解读规则: <!ELEMENT w

weixin_47371330的博客 238

字符“&”在XML文件中需要被转义 IDEA MAVEN 插件报红色波浪线错误

(一)字符“&”在XML文件中需要被转义 弄Mybatis的XML配置文件时,因为这样一条语句 connectionURL="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&useSSL=FALSE" 而运行出错。是因为&在xml文件中是特殊字符,需要使用转义字符,将&符号全部替换成&即可 connectio

qq_41160301的博客 4934
上一篇: java--面向对象
下一篇: Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.tools.JoinPointMatch
别浪呀
博客等级 码龄8年 1万+粉丝 260原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值