Spring通过注解配置IOC

已经有xml文件配置了为什么还要用注解配置,因为用xml文件配置在项目庞大的情况下,类之间的耦合度会增高,用注解配置就会降低耦合度
注解都是配置在类上的
有哪些注解可以注入
@Component
是一个标准化的组件的注解,没有实际意义
@Repository
用于对DAO实现类的注解,数据持久层,只跟数据库互动
@Service
用于对业务层的注解
@Controller
用于对控制层的注解

Bean中必须要有一个无参的构造方法
Spring注解的命名机制:加注解的类的类名首字母小写就是Bean的名字
第一个通过注解配置的IOC例子
创建一个iocs.xml文件,用于扫描包,这个扫描的就是加入了注解的类的上级包

<context:component-scan base-package="com.longteng.lesson2.my.impl">
</context:component-scan>

创建一个类,类上加@Component注解,将该类加入容器中托管

这个是一个接口,被加入注解的类实现了该接口

public interface MyUserDao {
void addUserDao(String userName);
}

接口实现类,并且重写了抽象方法,在类上加了@Component注解,将该类生成Bean,加入Spring容器中托管

@Component
public class UserDao implements MyUserDao {
@Override
public void addUserDao(String userName) {
    System.out.println(userName);
}
}

测试类,初始化方法添加xml文件启动容器,getBean的参数就是加入了@Component注解的类的类名首字母小写

public class Test {
ApplicationContext context;
@BeforeClass
public void beforeTest(){
    context=new ClassPathXmlApplicationContext("iocs.xml");
}
@org.testng.annotations.Test
public void test1(){
    MyUserDao myUserDao=(MyUserDao) context.getBean("userDao");
    myUserDao.addUserDao("xx");
}
}

在这里插入图片描述
Spring通过注解如何实现回调方法
@PostConstruct(见名知意,在构造方法之后执行) 初始化方法的注解方式 等同与在XML中声明init-method=init
@PreDestroy(见名知意,销毁) 销毁方法的注解方式 等同于在XML中声明destory-method=destory
例:

接口类,一个业务方法,一个空init方法,一个空end方法

public interface MyUserDao {
	void addUserDao(String userName);
	void init();
    void end();
}

接口实现类
重写接口类的业务方法,重写init方法,并将该方法定义为初始化方法,重写end方法,并将该方法定义为销毁方法

@Component
public class UserDao implements MyUserDao {
@Override
public void addUserDao(String userName) {
    System.out.println(userName);
}

@Override
@PostConstruct
public void init(){
    System.out.println("初始化方法");
}

@Override
@PreDestroy
public void end(){
    System.out.println("销毁方法");
}
}

测试类启动容器,创建Bean,调用业务方法,初始化方法,销毁方法,初始化方法无论什么时候调用都是最早执行,销毁方法无论什么时候调用都是最后执行

public class Test {
ApplicationContext context;
@BeforeClass
public void beforeTest(){
    context=new ClassPathXmlApplicationContext("iocs.xml");
}
@org.testng.annotations.Test
public void test1(){
    MyUserDao myUserDao=(MyUserDao) context.getBean("userDao");
    myUserDao.init();
    myUserDao.addUserDao("xx");
    myUserDao.end();
}
}

在这里插入图片描述
无论如何别忘了扫描包,要不然会找不到Bean

	<context:component-scan base-package="com.longteng.lesson2.my.impl">
	</context:component-scan>

@BeforeClass
@AfterClass
这两个注解是对于测试类中的启动容器而言,这两个是测试框架的内容,与Spring没关系

@PostConstruct
@PreDestroy
这两个注解是对于加入了@Component、@Repository、@Service、@Controller的注解中的初始化和销毁而言
@PostConstruct、@PreDestroy这两个注解与xml里的init-method、destroy-method是相同的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值