注解开发的几种关键字
( 此图转用黑马程序员的课程笔记)
还是用之前的文件,具体的内容见前面的笔记,文件的排布方式见下图:
对于@Controller(目前没学到SpringMVC,先不展示) @Service @Respository,这三个分别用web层,Service层,Dao层
@Service
package com.fxy.Service.Impl;
import com.fxy.Dao.UserDao;
import com.fxy.Service.UserService;
import org.springframework.stereotype.Service;
//<bean id="userService" class="com.fxy.Service.Impl.UserServiceImpl">
@Service("userService")
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void ServiceSave() {
userDao.Save();
}
}
@Service
package com.fxy.Dao.Impl;
import com.fxy.Dao.UserDao;
import org.springframework.stereotype.Repository;
//<bean id="userDao" class="com.fxy.Dao.Impl.UserDaoImpl"></bean>
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Override
public void Save() {
System.out.println("Save running...");
}
}
@Autowired一般与@Quafier一起使用。
需要注意的是:1.注解方式与xml方式用@Autowired一般与@Quafier不同的是:注解方式不需要在代码中写入setXXXX()的方法。所以下面的setUserDao()的方法可以不写。
2.当只需要创建一个userDao对象时,@Qualifier可以去掉。因为@Autowired注解会从spinrg容器中试图寻找类型为UserDao的对象,而从上述的代码中可以看到已经创建了UserDao的对象。而如果有多个UserDao类型的对象时,此时就需要用到@Qualifier并且需要与@Autowired一起使用才行。
import org.springframework.stereotype.Service;
//<bean id="userService" class="com.fxy.Service.Impl.UserServiceImpl">
@Service("userService")
public class UserServiceImpl implements UserService {
//<property name="userDao" ref="userDao"/>
@Autowired
@Qualifier("userDao")
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void ServiceSave() {
userDao.Save();
}
}
@Resource =@Autowired+@Qualifier
package com.fxy.Service.Impl;
import com.fxy.Dao.UserDao;
import com.fxy.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
//<bean id="userService" class="com.fxy.Service.Impl.UserServiceImpl">
@Service("userService")
public class UserServiceImpl implements UserService {
//<property name="userDao" ref="userDao"/>
// @Autowired
// @Qualifier("userDao")
@Resource(name = "userDao")
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void ServiceSave() {
userDao.Save();
}
}
@Value的使用一般是在.properties的文件中使用
package com.fxy.Service.Impl;
import com.fxy.Dao.UserDao;
import com.fxy.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
//<bean id="userService" class="com.fxy.Service.Impl.UserServiceImpl">
@Service("userService")
public class UserServiceImpl implements UserService {
@Value("${jdbc.password}")
private String password;
//<property name="userDao" ref="userDao"/>
// @Autowired
// @Qualifier("userDao")
@Resource(name = "userDao")
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void ServiceSave() {
System.out.println(password);
userDao.Save();
}
}
//jdbc.properties文件
jdbc.password=fxy
@scope 与前面的笔记中.xml文件的方式差不多
package com.fxy.Dao.Impl;
import com.fxy.Dao.UserDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
//<bean id="userDao" class="com.fxy.Dao.Impl.UserDaoImpl"></bean>
@Repository("userDao")
@Scope("singleton")
public class UserDaoImpl implements UserDao {
@Override
public void Save() {
System.out.println("Save running...");
}
}
上述的原始注解的方式的使用,同时需要在.xml文件中加入扫描方式:
上面是对com.fxy下面的所有的包进行扫描,凡是使用注解方式都会被扫描到加入到spring容器中,下面的的是配置文件所需要的使用的的,它也是进行配置文件的扫描。
<context:component-scan base-package="com.fxy"/>
<context:property-placeholder location="classpath:jdbc.properties"/>