Spring依赖注入之Java注解

基于Java的注解,是在类级别上定义beans,在方法级别上定义bean。和自动注解一样,可以减少xml的配置。

1. xml配置

在xml配置文件中添加自动扫描的配置:

<context:component-scan base-package="org.yousharp"/>

该配置不仅扫描构造型注解(@Controller, @Service, @Repository, @Component),也会扫描@Configuration注解。

2. 定义dao类和service类

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类,没有任何注解依附。


Spring依赖注入之注解注入

1. bean的自动装配和自动检测的区别

启用注解装配,在xml配置文件里添加:

<context:annotation-config/>

启用自动扫描注解,在xml配置文件里添加:

<context:component-scan base-package="org.yousharp.base"/>

二者的区别: 自动装配表示通过@Autowired, @Inject, @Resource等实现对属性或构造函数的自动注入;仍然需要在配置文件里定义bean,只是通过自动装配省去了propertyconstructor-arg的配置。 自动检测是扫描特定的注解(包括:@Component, @Controller, @Service, @Repository),将注解过的类自动定义为bean,自动检测是自动装配的超集,通过自动检测,可以省去在xml配置文件里定义bean了。


Spring依赖注入之XML配置

因为项目中一直要用到Spring相关的知识,所以最近在看Spring实战这本书,希望对Spring有一个整理的了解和把握。不得不说,这是一本好书,中文译本也不错。这个系列,记录自己关于Spring的笔记和理解,一是加深理解,同时也希望对别人有所帮助。

1. 通过构造方法和xml配置注入

定义带参数的构造函数,使依赖对象作为构造函数的参数:

	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;
		}
	}
	

maven note

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   jarA在前)
	- b.
		A-->T-->L1.1 jar
		B-->L1.0 jar 
		C --> A, B -------- C-->L1.0 jar (离得最近)

7. Maven 聚合和继承
	<mojules> 
	<dependencyManagement>

利用mRemoteNG,使用root用户ssh登陆ubuntu

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