目录
Spring注解开发
Spring原始注解
使用注解改进
注解替换位置1
注解替换位置2
在UserServiceImpl中其他改进写法
注解方式注入普通值
运行结果
初始方法注解
Spring是轻代码而中配置,配置比较繁琐,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。
Spring原始注解主要是替代
注意:使用注解进行开发是,需要在applicationContext.xml中配置组件扫描,作用是值定哪个宝及其子包下的Bean需要进行扫描以便识别使用注解的类、字段个方法
在com包下创建Dao包,service包,web包
在Dao包下的UserDao接口
public interface UserDao {
public void save();
}
在Dao包下的Impl包下的UserDaoImpl类
//
@Component("userDao")
//这个注解和上面xml一样
package com.Dao.impl;
import com.Dao.UserDao;
import org.springframework.stereotype.Component;
//
@Component("userDao")
//这个注解和上面xml一样
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("running...");
}
}
service包下的UserService接口
public interface UserService {
public void save();
}
service包下的Impl包下的UserServiceImpl类
//
@Component("userService")//这是一个组件,这个注解等于以上的xml配置
//
@Autowired // 这个表示自动注入
@Qualifier("userDao")//里面写要注入的bean的id
package com.service.Impl;
import com.Dao.UserDao;
import com.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
//
@Component("userService")//这是一个组件
public class UserServiceImpl implements UserService {
//
@Autowired // 这个表示自动注入
@Qualifier("userDao")//里面写要注入的bean的id
private UserDao userDao;
//使用注解可以不写set方法
/* public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
*/
@Override
public void save() {
userDao.save();
}
}
在web包下的UserController类下
package com.web;
import com.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserController {
public static void main(String[] args) {
ApplicationContext app=new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService = app.getBean(UserService.class);
userService.save();
}
}
运行结果
@Component("userService")//这是一个组件
public class UserServiceImpl implements UserService {
//
@Autowired // 按照数据类型从Spring容器中进行匹配的
private UserDao userDao;
@Override
public void save() {
userDao.save();
}
}
如果根据id进行匹配就要
@Autowired // 按照数据类型从Spring容器中进行匹配的
@Qualifier("userDao")//是按照id从容器中进行匹配的,但是主要此处的 @Qualifier结合@Autowired一起使用
@Resource(name ="userDao")//等价于 @Autowired +@Qualifier
package com.service.Impl;
import com.Dao.UserDao;
import com.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
//
@Component("userService")//这是一个组件
public class UserServiceImpl implements UserService {
//
// @Autowired // 按照数据类型从Spring容器中进行匹配的
// @Qualifier("userDao")//是按照id从容器中进行匹配的,但是主要此处的 @Qualifier结合@Autowired一起使用
@Resource(name ="userDao")//等价于 @Autowired +@Qualifier
private UserDao userDao;
@Override
public void save() {
userDao.save();
}
}
使用注解的方式set方法可以省略不写,使用想xml配置就必须写,注解是通过反射
@Value可以注入值,一般使用el表达式获取配置文件中的值
@Value("${jdbc.driver}")
private String user;
也可以注入普通值,但是显示十分的多余,下面两种方式一样。
@Value("hello")
private String test;
private String test="hello";
在serviceImpl中
@PostConstruct
public void init(){
System.out.println("初始方法");
}
@PreDestroy
public void destory(){
System.out.println("销毁方法");
}