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