Spring常用的Annotation组件

配置组件 Configure Components

@Configuration

@Autowired @Qualifier @Resource(name="")

// @Qualifier("dao")
// @Autowired
// Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,
//        添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义
//        @Repository注解的名称之一
package com.zz.annotationdemo.injections.autowired;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;/*** @Author: itzz008* @DateTime: 2021/2/20 10:08* @Description: TODO*/
@Configuration
@ComponentScan(value={"com.zz.annotationdemo.project.controller","com.zz.annotationdemo.project.dao","com.zz.annotationdemo.project.service"})
public class MyConfig {}package com.zz.annotationdemo.injections.autowired;import com.zz.annotationdemo.project.controller.UserController;
import com.zz.annotationdemo.project.dao.UserDao;
import com.zz.annotationdemo.project.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** @Author: itzz008* @DateTime: 2021/2/20 10:19* @Description: TODO*/
public class MyTest {@Testpublic void test(){ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);UserController userController = (UserController)context.getBean("userController");UserService userService =  (UserService) context.getBean("userService");userService.print();UserDao userDao = (UserDao)context.getBean("dao");userDao.setFlag("0");System.out.println(userDao);}
}package com.zz.annotationdemo.project.controller;import com.zz.annotationdemo.project.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;/*** @Author: itzz008* @DateTime: 2021/2/19 16:22* @Description: TODO*/
@Controller
public class UserController {@Autowiredprivate UserService userService;
}package com.zz.annotationdemo.project.dao;import org.springframework.stereotype.Repository;/*** @Author: itzz008* @DateTime: 2021/2/19 16:22* @Description: TODO*/
@Repository(value="dao")
public class UserDao {private String flag = "1";public void setFlag(String flag) {System.out.println("com.zz.annotationdemo.project.dao.UserDao.setFlag");this.flag = flag;}@Overridepublic String toString() {return "UserDao{" +"flag='" + flag + '\'' +'}';}
}package com.zz.annotationdemo.project.service;import com.zz.annotationdemo.project.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;import javax.annotation.Resource;/*** @Author: itzz008* @DateTime: 2021/2/19 16:22* @Description: TODO*/
@Service
public class UserService {//    @Qualifier("dao")
//    @Autowired@Resource(name="dao")private UserDao userDao;public void print(){System.out.println("=========UserService:================"+userDao);}
}

@ComponentScan

@ComponentScan(value="com.zz",useDefaultFilters=false,includeFilters={@ComponentScan.Filter(type=FilterType.CUSTOM,value={MyTypeFilter.class})},excludeFilters={@ComponentScan.Filter(value={MyAnnotation.class})})
public class MyConfig {}public class MyTypeFilter  implements TypeFilter {@Overridepublic boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {String className = metadataReader.getClassMetadata().getClassName();System.out.println("------------------className:-------------------"+className);try {Class clazz = Class.forName(className);if(clazz.equals(User.class)){return false;}} catch (ClassNotFoundException e) {e.printStackTrace();return false;}return true;}
}

@Scope

// prototype: 原型模式, 创建多个实例
// singleton: 单例
// request: 用于web模块,同一个请求只创建一个实例
// session: 用于web模块,同一个session只创建一个实例package com.zz.annotationdemo.scope;import com.zz.annotationdemo.project.entity.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;/*** @Author: itzz008* @DateTime: 2021/2/20 9:54* @Description: TODO*/
@Configuration
public class MyConfig {// 1. prototype: 原型模式,创建多个实例//2.  singleton: 单例模式//3.  request: 用于web模块,同一个请求只创建一个实例//4.  session: 用于web模块,同一个session创建一个实例@Scope("singleton")@Beanpublic User user(){return new User("zz",18);}
}package com.zz.annotationdemo.scope;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** @Author: itzz008* @DateTime: 2021/2/20 9:56* @Description: TODO*/
public class MyTest {@Testpublic void test(){ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);Object user1 = context.getBean("user");Object user2 = context.getBean("user");System.out.println(user1);System.out.println(user2);System.out.println(user1 == user2);}
}package com.zz.annotationdemo.project.entity;import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;/*** @Author: itzz008* @DateTime: 2021/2/19 16:21* @Description: TODO*/
public class User {private String name;private int age;public User() {}public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}

@Lazy

@Configuration
public class MyConfig {//    @Lazy@Beanpublic User user(){System.out.println("初始化user");return new User("tom",12);}
}public class MyTest {@Testpublic void test(){ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);System.out.println("====初始化容器=========");context.getBean("user");}
}

@Conditional

@Configuration
@ComponentScan(value = "com.zz.annotationdemo.project")
public class MyConfig {@Conditional(value = WindowsCondition.class)@Beanpublic User tom(){return new User("tom",18);}@Conditional(value = WindowsCondition.class)@Beanpublic User mic(){return new User("mic",17);}@Conditional(value = LinuxCondition.class)@Beanpublic User james(){return new User("James",16);}}public class LinuxCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {String osName = context.getEnvironment().getProperty("os.name");if(osName.contains("Linux")){return true;}return  false;}
}public class WindowsCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {Environment environment = context.getEnvironment();String osName = environment.getProperty("os.name");System.out.println("osName:"+osName);if( osName.contains("Windows") ){return true;}return false;}
}public class MyTest {@Testpublic void test(){ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);String[] beanDefinitionNames = context.getBeanDefinitionNames();System.out.println("==============test============================");for (String beanDefinitionName : beanDefinitionNames) {System.out.println(beanDefinitionName);}User tom = (User)context.getBean("tom");User mic = (User)context.getBean("mic");User james = (User)context.getBean("james");}
}

@Import

@Configuration
@Import(value = {MyImportSelector.class,MyImportBeanDefinitionRegisterar.class})
public class MyConfig {@Beanpublic Company company(){return new Company();}@Beanpublic Member member(){return new Member();}//往 IoC容器中注册Bean的方式有以下几种:// 1. @Bean 直接导入单个类// 2. @ComponentScan 默认只扫描 @Controller @Service @Repository @Component// 3. @Import 快速给容器导入某个组件Bean// a. @Import 直接传参导入// b. ImportSelector 自定义导入规则// c. ImportBeanDefinitionRegistrar 使用BeanDefinitionRegistry可以手动注册到IoC容器//4. FactoryBean 把需要注入的对象封装为 FactoryBean// a. FactoryBean 负责将Bean注册到 容器的Bean// b. BeanFactory 负责从容器中获取Bean@Beanpublic User user(){return new User("tom",19);}@Beanpublic MyFactoryBean monkey(){return new MyFactoryBean();}
}public class MyFactoryBean implements FactoryBean<Monkey> {@Overridepublic Class<?> getObjectType() {return Monkey.class;}@Overridepublic boolean isSingleton() {return false;}@Overridepublic Monkey getObject() throws Exception {return new Monkey();}
}public class MyImportBeanDefinitionRegisterar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {boolean company = registry.containsBeanDefinition("com.zz.annotationdemo.project.entity.Company");boolean member = registry.containsBeanDefinition("com.zz.annotationdemo.project.entity.Member");if(company && member){BeanDefinition beanDefinition = new RootBeanDefinition(Cat.class);registry.registerBeanDefinition("cat",beanDefinition);}}
}public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"com.zz.annotationdemo.project.entity.Company","com.zz.annotationdemo.project.entity.Member"};}
}public class MyTest {@Testpublic void test(){ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);String[] beanDefinitionNames = context.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println(beanDefinitionName);}Object monkey1 = context.getBean("monkey");System.out.println(monkey1);Object monkey2 = context.getBean("monkey");System.out.println(monkey2);//获取factoryBeanObject factoryBean = context.getBean("&monkey");System.out.println(factoryBean);}
}

@PostConstruct 用于指定的初始化方法上 用在方法上

@PreDestroy 用于指定的销毁方法上

@DependsOn 用于Bean的初始化和销毁的顺序

interface : BeanPostProcessor

//Bean初始化和销毁方式
//1. @Bean 添加 initMethod 和 destroyMethod 配置
//2. 实现 InitializingBean 和 DisposableBean
//3. JDK自带的:  @PostConstruct 和  @PreDestroy 注解到方法上// 实现 BeanPostProcessor 在初始化Bean前、后分别做一些操作package com.zz.annotationdemo.project.entity;import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;/*** @Author: itzz008* @DateTime: 2021/2/20 9:22* @Description: TODO*/
@Component
@Lazy
public class Airplain {public Airplain() {System.out.println("调用airplain的构造方法");}@PostConstructpublic void addOil(){System.out.println("飞机飞行前加油");}public void run(){System.out.println("正在空中巡航");}@PreDestroypublic void close(){System.out.println("飞机落地熄火");}
}package com.zz.annotationdemo.project.entity;/*** @Author: itzz008* @DateTime: 2021/2/20 9:19* @Description: TODO*/
public class Car {public Car() {System.out.println("调用Car的构造方法");}public void addOil(){System.out.println("行驶前加油");}public void run(){System.out.println("正在开车");}public void close(){System.out.println("停车熄火");}
}package com.zz.annotationdemo.project.entity;import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;/*** @Author: itzz008* @DateTime: 2021/2/20 9:21* @Description: TODO*/
@Component
@Lazy
public class Train implements InitializingBean, DisposableBean {@Overridepublic void destroy() throws Exception {System.out.println("火车对象销毁");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("火车对象初始化");}
}package com.zz.annotationdemo.lifecycle;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;/*** @Author: itzz008* @DateTime: 2021/2/20 9:46* @Description: TODO*/
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("postProcessBeforeInitialization:"+beanName);return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("postProcessAfterInitialization:"+beanName);return bean;}
}package com.zz.annotationdemo.lifecycle;import com.zz.annotationdemo.project.entity.Car;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;/*** @Author: itzz008* @DateTime: 2021/2/20 9:26* @Description: TODO*/
@ComponentScans(value = {@ComponentScan(value = {"com.zz.annotationdemo.lifecycle"}),@ComponentScan(value = {"com.zz.annotationdemo.project.entity"}),
})
@Configuration
public class MyConfig {@Lazy@Bean(initMethod = "addOil",destroyMethod = "close")public Car car(){return new Car();}
}package com.zz.annotationdemo.lifecycle;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** @Author: itzz008* @DateTime: 2021/2/20 9:30* @Description: TODO*/
public class MyTest {@Testpublic void test(){ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);System.out.println("=======start IoC==========");
//        context.getBean("car");
//        context.getBean("train");context.getBean("airplain");((AnnotationConfigApplicationContext) context).close();}
}

@Primary

package com.zz.annotationdemo.injections.primary;import com.zz.annotationdemo.project.dao.UserDao;
import com.zz.annotationdemo.project.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;/*** @Author: itzz008* @DateTime: 2021/2/20 16:19* @Description: TODO*/
@Configuration
@ComponentScan(value={"com.zz.annotationdemo.project.controller","com.zz.annotationdemo.project.dao","com.zz.annotationdemo.project.service"})
public class MyConfig {@Primary@Bean(value="myUserDao")public UserDao userDaoN(){UserDao userDao = new UserDao();userDao.setFlag("2x");return userDao ;}@Bean(value="myUserDao")public UserDao userDao(){UserDao userDao =  new UserDao();userDao.setFlag("1x");return userDao;}}package com.zz.annotationdemo.injections.primary;import com.zz.annotationdemo.project.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** @Author: itzz008* @DateTime: 2021/2/20 16:23* @Description: TODO*/
public class MyTest {@Testpublic void test(){ApplicationContext context  = new AnnotationConfigApplicationContext(MyConfig.class);UserDao userDao = (UserDao)context.getBean("myUserDao");System.out.println(userDao.toString());}
}

@Value @PropertySource @Bean

package com.zz.annotationdemo.injections.propertysource;import com.zz.annotationdemo.project.entity.Bird;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;/*** @Author: itzz008* @DateTime: 2021/2/20 16:51* @Description: TODO*/
@Configuration
@PropertySource(value={"classpath:values.properties"})
public class MyConfig {@Beanpublic Bird bird(){return new Bird("wkk",12);}
}package com.zz.annotationdemo.injections.propertysource;import com.zz.annotationdemo.project.entity.Bird;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.env.Environment;/*** @Author: itzz008* @DateTime: 2021/2/20 16:53* @Description: TODO*/
public class MyTest {@Testpublic void test(){ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);String[] beanDefinitionNames = context.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println(beanDefinitionName);}Bird bird = (Bird)context.getBean("bird");System.out.println(bird.toString());Environment environment = context.getEnvironment();String birdColor = environment.getProperty("bird.color");System.out.println("birdColor:"+birdColor);}
}package com.zz.annotationdemo.project.entity;import org.springframework.beans.factory.annotation.Value;/*** @Author: itzz008* @DateTime: 2021/2/20 16:40* @Description: TODO*/
public class Bird {//支持的数据类型// 1. 基本数据类型// 2. Spring EL表达式// 3. 通过配置文件赋值@Value("鹦鹉")private String name;@Value("#{6 - 1}")private int age;@Value("${bird.color}")private String color;public Bird(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}@Overridepublic String toString() {return "Bird{" +"name='" + name + '\'' +", age=" + age +", color='" + color + '\'' +'}';}
}

赋值(自动装配)组件 Injection Components

@Component

@Service

@Controller

@Repository

@Value

@Autowired

@PropertySource 读取配置文件赋值

@Qualifier 如存在多个实例配合使用

@Primary 自动装配当出现多个候选者时候,被注解为 @Primary的Bean将作为首选者,否则将抛出异常

@Resource 默认按名称装配, 当找不到与名称匹配的bean才会按类型装配

织入组件 Weave Components

ApplicationContextAware

BeanDefinitionRegistryPostProcessor 实现了 BeanFactoryPostProcessor ,是Spring框架的BeanDefinitionRegistry的后处理器,用来注册额外的BeanDefinition

切面组件 Aspect Componnets

@EnableTransactionManagement 添加对事务管理的支持

@Transactional 配置声明式事务

注: 源码地址:

https://gitee.com/itzz008/design-pattern.git

design-pattern/ all-coding / spring-source / spring-componnets

注:pom.xml

<?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>com.zz</groupId><artifactId>spring-component</artifactId><version>1.0</version><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.4</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version></dependency>        </dependencies><build><finalName>${artifactId}</finalName><resources><resource><directory>${basedir}/src/main/resources</directory><includes><include>**/*</include></includes></resource><resource><directory>${basedir}/src/main/java</directory><excludes><exclude>**/*.java</exclude><exclude>**/*.class</exclude></excludes></resource></resources><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding><compilerArguments><verbose /><bootclasspath>${java.home}/lib/rt.jar</bootclasspath></compilerArguments></configuration></plugin><plugin><artifactId>maven-resources-plugin</artifactId><version>2.5</version><executions><execution><id>copy-resources</id><!-- here the phase you need --><phase>validate</phase><goals><goal>copy-resources</goal></goals><configuration><encoding>UTF-8</encoding><outputDirectory>${basedir}/target/classes</outputDirectory><resources><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes><filtering>true</filtering></resource></resources></configuration></execution></executions></plugin><plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.26</version><configuration><webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml><contextPath>/</contextPath><connectors><connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"><port>8080</port></connector></connectors><scanIntervalSeconds>0</scanIntervalSeconds><scanTargetPatterns><scanTargetPattern><directory>src/main/webapp</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></scanTargetPattern></scanTargetPatterns><systemProperties><systemProperty><name>javax.xml.parsers.DocumentBuilderFactory</name><value>com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl</value></systemProperty><systemProperty><name>javax.xml.parsers.SAXParserFactory</name><value>com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl</value></systemProperty><systemProperty><name>javax.xml.transform.TransformerFactory</name><value>com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl</value></systemProperty><systemProperty><name>org.eclipse.jetty.util.URI.charset</name><value>UTF-8</value></systemProperty></systemProperties></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.2</version><configuration><archive><addMavenDescriptor>false</addMavenDescriptor></archive><webResources><resource><!-- this is relative to the pom.xml directory --><directory>src/main/resources/</directory><targetPath>WEB-INF/classes</targetPath><includes><include>**/*.*</include></includes><!-- <excludes><exclude>**/local</exclude><exclude>**/test</exclude><exclude>**/product</exclude></excludes> --><filtering>true</filtering></resource><resource><!-- this is relative to the pom.xml directory --><directory>src/main/resources</directory><targetPath>WEB-INF/classes</targetPath><filtering>true</filtering></resource></webResources></configuration></plugin><plugin><groupId>org.zeroturnaround</groupId><artifactId>javarebel-maven-plugin</artifactId><executions><execution><id>generate-rebel-xml</id><phase>process-resources</phase><goals><goal>generate</goal></goals></execution></executions><version>1.0.5</version></plugin></plugins><pluginManagement><plugins><!--This plugin's configuration is used to store Eclipse m2e settingsonly. It has no influence on the Maven build itself. --><plugin><groupId>org.eclipse.m2e</groupId><artifactId>lifecycle-mapping</artifactId><version>1.0.0</version><configuration><lifecycleMappingMetadata><pluginExecutions><pluginExecution><pluginExecutionFilter><groupId>org.zeroturnaround</groupId><artifactId>javarebel-maven-plugin</artifactId><versionRange>[1.0.5,)</versionRange><goals><goal>generate</goal></goals></pluginExecutionFilter><action><ignore></ignore></action></pluginExecution></pluginExecutions></lifecycleMappingMetadata></configuration></plugin></plugins></pluginManagement></build>
</project>

4_Spring常用的Annotation组件相关推荐

  1. 微信小程序常用视图容器组件

    微信小程序常用视图容器组件 1.组件概述 2.常用的试图容器组件 2.1 view 2.1.1 案例 2.2 scroll-view 2.2.1 案例 2.3 swiper 2.3.1 案例 1.组件 ...

  2. 【Vue.js】Vue.js中常用的UI组件库和Vue Router

    1.Vue生态中常用的UI组件库 1. vant 介绍 轻量级.可靠的移动端 Vue 组件库 有赞前端团队出品 GitHub地址:https://github.com/youzan/vant 特性 拥 ...

  3. 开发微信小程序,常用的开发组件有哪些?

    随着微信小程序开发的持续升温,小程序开发也变得越来越流行,因为小程序不仅能帮助企业解决推广的问题,还能为企业带来可观的收益.但是很多企业并不知道如何开发微信小程序,而市面上的开发组件又有很多种,不知道 ...

  4. 30组常用前端开发组件库,前端组件收集整理列表

    0. 前端自动化 前端构建工具 gulp – The streaming build system grunt – the JavaScript Task Runner 前端模块管理器 Bower – ...

  5. 微信小程序常用表单组件

    微信小程序常用表单组件 1.常用表单组件 1.1 button 1.2 checkbox 1.3 input 1.4 label 1.5 form 1.6 radio 1.7 slider 1.8 s ...

  6. .NET平台常用的开发组件

    工欲善其事,必先利其器.学习.NET也10年有余,其优雅的编程风格,高效率的开发速度,极度简单的可扩展性,足够强大开发类库,较小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开 ...

  7. 最常用的父子组件传值方式prop详解

    组件传参 prop 父组件给子组件传参 所有的prop都使得其父子prop之间形成一个单向下行绑定: 父级prop的更新会向下流动到子组件中, 但是反过来则不行; 这样会防止从子组件意外改变父组件的状 ...

  8. Android常用的第三方组件

    UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...

  9. SpringCloud之SpringCloud常用的五大组件

    本篇文章体系 了解系统架构的演变 了解RPC与Http的区别 掌握HttpClient的简单使用 知道什么是SpringCloud 独立搭建Eureka注册中心 独立配置Robbin负载均衡 1.系统 ...

最新文章

  1. 1.5 try catch语句详解
  2. git使用教程问题列表
  3. join操作-内联,左外联,右外联,交叉联,全联
  4. 华为交换机的端口hybrid端口属性配置
  5. Go 语言本身提供的包管理机制
  6. Jquery 学习心得和资料
  7. Procdump+Mimikatz获取Windows明文密码
  8. 思科模拟器Cisco Packet Tracer语言汉化包设置(附下载链接)
  9. Java ques: java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
  10. python saveas_Python中正确的Save-As函数
  11. 线性代数---之基向量
  12. 无效的m3u8怎么办_vue使用video.js解决m3u8视频播放格式
  13. 安装hue一直失败,请大佬帮帮忙,万分感谢!!!!!!!!
  14. 一周新书榜:程序员最受关注的书有这样6本
  15. 19号笔刷 ps_【精品】PS绘画19号笔刷正确使用方法
  16. OpenSea上如何创建自己的NFT(Polygon)
  17. 中国武术职业联赛(WMA)
  18. realsense系列(三):播放深度图和RGB图
  19. Multi-task learning of facial landmarks and attributes with Tensorflow(一)
  20. 曲师大校徽 透明背景 多颜色可选 多样式可选

热门文章

  1. Java后端面试八股文汇总
  2. 陕西省工程师职称评审常见问题你都了解吗
  3. Mac软件推荐|Mac资深用户必备11款软件
  4. 【MyBatis学习8】MyBatis中的二级缓存
  5. 揭秘倚天实例背后的硬核实力
  6. 怎么提高C++编程的基本功?这才是硬实力
  7. android gpu 参数,开/关大不同 Android4.0 GPU硬件加速实测
  8. 一个大学生的广州血泪史(五)[转帖]
  9. Global.asax 文件的作用
  10. 视频教程-finereport从入门到实战视频教程-大数据