基于Java的注解,是在类级别上定义beans,在方法级别上定义bean。和自动注解一样,可以减少xml的配置。
在xml配置文件中添加自动扫描的配置:
<context:component-scan base-package="org.yousharp"/>
该配置不仅扫描构造型注解(@Controller, @Service, @Repository, @Component),也会扫描@Configuration注解。
dao类是service类的一个属性,是需要注入的对象。
public class VideoService {
SaveVideoInfoDao saveVideoInfoDao;
public VideoService() {
}
public VideoService(SaveVideoInfoDao saveVideoInfoDao) {
this.saveVideoInfoDao = saveVideoInfoDao;
}
public void saveVideoInfo(String info) {
saveVideoInfoDao.printMesg(info);
}
}
public class SaveVideoInfoDao {
public void printMesg(String message) {
System.out.println("saving video info....");
}
}
dao类和service类就是两个很普通的java类,没有任何注解依附。
启用注解装配,在xml配置文件里添加:
<context:annotation-config/>
启用自动扫描注解,在xml配置文件里添加:
<context:component-scan base-package="org.yousharp.base"/>
二者的区别:
自动装配表示通过@Autowired, @Inject, @Resource等实现对属性或构造函数的自动注入;仍然需要在配置文件里定义bean,只是通过自动装配省去了property
和constructor-arg
的配置。
自动检测是扫描特定的注解(包括:@Component, @Controller, @Service, @Repository),将注解过的类自动定义为bean,自动检测是自动装配的超集,通过自动检测,可以省去在xml配置文件里定义bean
了。
因为项目中一直要用到Spring相关的知识,所以最近在看Spring实战这本书,希望对Spring有一个整理的了解和把握。不得不说,这是一本好书,中文译本也不错。这个系列,记录自己关于Spring的笔记和理解,一是加深理解,同时也希望对别人有所帮助。
定义带参数的构造函数,使依赖对象作为构造函数的参数:
public class VideoInfoServiceImpl implements VideoInfoService {
VideoInfoDao videoInfoDao;
public VideoInfoServiceImpl() {}
public VideoInfoServiceImpl(VideoInfoDao videoInfoDao) {
this.videoInfoDao = videoInfoDao;
}
@Override
public List<Map<String, Object>> getVideos(Map<String, Object> queryMap) {
List<Map<String, Object>> videoList = videoInfoDao.getVideos(queryMap);
return videoList;
}
}
1. Pom.xml
src/main/java
src/test/java
2. Mvn compile
Mvn test
Mvn package
Mvn clean
Mvn install
3. Mvn archetype:generate
• ${basedir} 项目根目录
• ${project.build.directory} 构建目录,缺省为target
• ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
• ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
• ${project.packaging} 打包类型,缺省为jar
• ${project.xxx} 当前pom文件的任意节点的内容
4. Unit test
Dbutil
Easymock
5. Maven scope
Test 测试范围有效,编译和打包时不会使用这个依赖;
Compile 默认的范围,编译范围有效,在编译、测试、打包时都会将依赖存储;
Provided 编译、测试有效,生成war包时不会加入:(servlet-api);
Runtime 在运行的时候有效,编译时候不依赖;
6. Dependency
- a.
A --> L1.1 jar
B --> L1.0 jar
C --> A, B ----------- C -->L1.1 jar(A在前)
- b.
A-->T-->L1.1 jar
B-->L1.0 jar
C --> A, B -------- C-->L1.0 jar (离得最近)
7. Maven 聚合和继承
<mojules>
<dependencyManagement>
windows上有许多优秀的远程登陆工具,mRemoteNG是其中一个,本人在尝试使用
‘ssh root@192.168.x.x’
时,得到错误信息
Permission denied
,
可以确认的是ubuntu上端口已开,因为使用
ssh oukongli@192.168.x.x
是没有问题的。
经过一番摸索,原来是ubuntu在默认情况下关闭了root用户的登陆,解决方法为:
在/etc/ssh/sshd_config
中,
把PermitRootLogin without-password
改为PermitRootLogin yes
。