最近做设计和一些简单算法的东东,发现原来maven和spring注册的一些东西有遗忘,需要总结下重新加固下:
1、maven
Maven的核心文件很小,主要的任务都是由插件来完成。定位到:%本地仓库%\org\apache\maven\plugins,可以看到一些下载好的插件:
一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下:
Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译:
Maven对一些生命周期的阶段(phase)默认绑定了插件目标,因为不同的项目有jar、war、pom等不同的打包方式,因此对应的有不同的绑定关系,其中针对default生命周期的jar包打包方式的绑定关系如下:
第二列中,冒号后面即是绑定的插件目标,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式。Plugin Prefix
典型的pom在build中的设置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/package.xml</descriptor>
</descriptors>
<outputDirectory>/deploy/audit-image</outputDirectory>
<finalName>${project.name}</finalName>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
每个plug in都可以有很多参数设置,可以控制在执行阶段的处理,maven-assembly-plugin插件可以通过声明文件来设置哪些文件打包
2、springboot使用:
spring中注解的分类:
1、一类是使用Bean,即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装;比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean;
2、一类是注册Bean,@Component , @Repository , @ Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装。
@Bean在@Configuration和在@Component中的区别
官方解释翻译:
在Component中(@Component标注的类,包括@Service,@Repository, @Controller)使用@Bean注解和在@Configuration中使用是不同的。在@Component类中使用方法或字段时不会使用CGLIB增强(及不使用代理类:调用任何方法,使用任何变量,拿到的是原始对象,后面会有例子解释)。而在@Configuration类中使用方法或字段时则使用CGLIB创造协作对象(及使用代理:拿到的是代理对象);当调用@Bean注解的方法时它不是普通的Java语义,而是从容器中拿到由Spring生命周期管理、被Spring代理甚至依赖于其他Bean的对象引用。在@Component中调用@Bean注解的方法和字段则是普通的Java语义,不经过CGLIB处理。
@Autowired新特性:
@Autowired 在Spring2.5引入,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。 无需再通过传统的在bean的xml文件中进行bean的注入配置。而是使用注解,系统自动为你注入,即隐式配置。首先要知道:@Autowired是根据类型进行标注的,如需要按照名称进行装配,则需要配合@Qualifier使用 进行指定包扫描的component
配置文件设置变化,比如数据库配置,更加简单,举例如下:
@Configuration public class DataDbConfig { private static Logger logger = LoggerFactory.getLogger(DataDbConfig.class); @Value("${mybatis.config-location}") private String configPath; @Primary @Bean(name = "dataDataSource") @Qualifier("dataDataSource") @ConfigurationProperties(prefix = "datasource.data") public DataSource dataDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "dataSessionFactory") public SqlSessionFactory dataSessionFactory(@Qualifier("dataDataSource") DataSource dataDataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataDataSource); bean.setConfigLocation(new ClassPathResource(configPath)); return bean.getObject(); } @Bean(name = "dataSessionTemplate") public SqlSessionTemplate dataSessionTemplate(@Qualifier("dataSessionFactory") SqlSessionFactory baseSessionFactory) { return new SqlSessionTemplate(baseSessionFactory); } }
注解中使用了@Bean,@Qualifier,@Configuration,@ConfigurationProperties
3、redis的命令
数据统计和流量限制关心的特性包括:
HINCRBY:针对hash的key进行增加
EVAL:从 Redis 2.6.0 版本开始,通过内置的 Lua 解释器,可以使用 EVAL 命令对 Lua 脚本进行求值。
Transaction相关命令:DISCARD、EXEC、MULTI、UNWATCH、WATCH用的较少,需要深入了解下
注意:HINCRBY之前要进行HGET,无法保证事务,需要将对应的命令放到EVAL中编写一个脚本执行
3、参考文档:
redis相关命令 http://doc.redisfans.com/
maven常用plug in http://maven.apache.org/plugins/index.html